You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Logstash基于Mobile_Number字段新增国家名称字段

方案实现(基于Logstash原生过滤器,无需引入第三方依赖)

核心逻辑是先匹配手机号前缀提取国家码,再做字典映射,支持后续快速扩展国家码规则。

filter{
  # 原有grok提取基础字段的逻辑保持不变
  grok {
    break_on_match => false
    match => {
      "message" => [
         "Mobile_Number: (?<Mobile_Number>[0-9]+)",
         "User_id(?<User_id>[0-9]+)"
      ]
    }
  }

  # 新增:匹配手机号前缀提取国家码,国家码规则按位数从长到短排列避免误匹配
  grok {
    match => {
      "Mobile_Number" => [
        # 3位国家码放最前面
        "^(?<country_code>971)[0-9]+",
        # 2位国家码
        "^(?<country_code>20)[0-9]+"
        # 后续新增国家码直接按位数降序加在这里即可,比如加中国86就加一行 "^(?<country_code>86)[0-9]+"
      ]
    }
    tag_on_failure => ["_no_country_code_match"] # 匹配不到国家码的日志会打这个标签方便后续排查
  }

  # 新增:国家码映射国家名称
  translate {
    field => "country_code"
    target => "country"
    dictionary => {
      "971" => "巴林"
      "20" => "埃及"
      # 后续新增国家映射直接往这个字典里加键值对即可
    }
    fallback => "未知国家" # 匹配不到映射的默认值
  }

  # 可选:不需要保留中间生成的country_code字段可以开启下面的配置
  # mutate {
  #   remove_field => ["country_code"]
  # }
}

效果验证

  • 手机号为201123123123的日志:自动提取country_code=20,最终生成country=埃及
  • 手机号为971123123123的日志:自动提取country_code=971,最终生成country=巴林

扩展说明

后续新增国家码只需要两步操作:

  1. 在第二个grok的match规则里,按国家码位数从长到短新增对应前缀匹配规则
  2. 在translate的dictionary里新增国家码和国家名的键值对即可

如果国家码规则较多,也可以把映射字典单独存为yaml文件,避免logstash配置过长,只需将translate配置里的dictionary替换为dictionary_path => "/path/to/country_map.yaml",yaml文件内容格式为:

"20": "埃及"
"971": "巴林"
"86": "中国"

内容的提问来源于stack exchange,提问作者Divyank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:54:04