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

Logstash(ELK)无DNS/AD时基于本地文件实现IP主机名富化方法

ELK栈实现IP->Hostname静态映射富化方案

ELK栈原生支持和Splunk lookup完全等价的静态映射能力,不需要依赖DNS、AD等外部查询服务,直接用你准备好的CSV文件就能实现IP到主机名的富化,两种常用落地方式按需选择即可。

方案1:Logstash摄入阶段富化(推荐,性能最优)

该方案在数据写入Elasticsearch前就完成字段富化,查询时不需要额外计算,是生产环境最常用的实现方式。

  • 预处理CSV文件
    将现有映射文件整理为标准两列格式,表头固定为ip和hostname即可,示例格式:
    ip,hostname
    192.168.1.10,prod-web-01
    192.168.1.12,prod-mysql-01
    10.0.2.45,office-pc-wangwu
    
    将整理好的文件放到Logstash进程有读取权限的路径下,比如/etc/logstash/conf.d/ip_hostname_map.csv。
  • 配置Logstash translate过滤器
    translate是Logstash内置的静态键值映射插件,不需要额外安装,直接在处理Zeek/Suricata日志的filter段添加如下配置即可:
    filter {
      # 源IP映射,新增src_hostname字段,不覆盖原始src_ip
      translate {
        field => "src_ip" # 替换为你日志中实际存储源IP的字段名,比如Zeek对应id.orig_h
        target => "src_hostname"
        dictionary_path => "/etc/logstash/conf.d/ip_hostname_map.csv"
        exact => true
        refresh_interval => 300 # 每5分钟自动重载CSV文件,更新映射无需重启Logstash
        fallback => "unknown-host" # 无匹配时的默认值,不需要可删除该行
      }
      # 目的IP映射,新增dest_hostname字段
      translate {
        field => "dest_ip" # 替换为你日志中实际存储目的IP的字段名,比如Zeek对应id.resp_h
        target => "dest_hostname"
        dictionary_path => "/etc/logstash/conf.d/ip_hostname_map.csv"
        exact => true
        refresh_interval => 300
        fallback => "unknown-host"
      }
    }
    

    如果日志中IP字段为数组格式(比如部分Zeek日志记录的多IP场景),在对应translate块中添加iterate_on => ["你的IP字段名"]参数,插件会自动遍历数组内所有IP完成匹配。

  • 验证配置后重启Logstash,后续新摄入的日志会自动携带src_hostname、dest_hostname字段,Kibana中检索、做可视化时直接调用这两个字段即可。

方案2:Elasticsearch Enrich策略富化(适合无Logstash配置权限的场景)

如果不方便调整Logstash配置,可以直接在Elasticsearch层实现映射,效果和摄入阶段富化一致:

  1. 将CSV文件导入Elasticsearch生成静态查找索引,比如命名为ip_hostname_lookup,索引中每个文档仅需包含ip、hostname两个字段。
  2. 在Kibana Dev Tools中创建匹配类型的Enrich策略:
    PUT /_enrich/policy/ip_hostname_map_policy
    {
      "match": {
        "indices": "ip_hostname_lookup",
        "match_field": "ip",
        "enrich_fields": ["hostname"]
      }
    }
    
    执行以下命令让策略生效:
    POST /_enrich/policy/ip_hostname_map_policy/_execute
    
  3. 创建Ingest摄入管道,将管道和Zeek/Suricata对应的日志索引绑定,新写入的数据会自动匹配IP添加hostname字段;历史数据可以通过_update_by_query接口重跑管道完成补全。

注意事项

  • 不建议直接用hostname覆盖原始IP字段,网络安全排查场景下原始IP是必要的溯源依据,在Kibana中配置展示字段时优先选hostname即可,体验和替换IP完全一致。
  • 映射性能无瓶颈:Logstash translate插件会将整个CSV加载到内存中做哈希匹配,即使是十万级别的IP映射条目,处理延迟也在微秒级,远高于外部DNS查询的性能。
  • CSV更新不需要重启服务:Logstash侧会按配置的refresh_interval自动重载文件;ES Enrich侧只要更新lookup索引中的数据,重新执行策略生效命令即可同步新映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:39:13