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

Azure Activity Logs接入Graylog故障排查:Logstash无法发送日志

问题

已将Azure Activity Logs导出至Blob Storage,当前使用Logstash 8.7.1版本,配合docker-compose通过GELF UDP协议将日志发送至Graylog,Logstash输入端采用azure_blob_storage插件。但Logstash无法将日志发送至Graylog,配置代码如下:

input {
     azure_blob_storage {
          connection_string => "DefaultEndpointsProtocol=https;AccountName=<BLOB_NAME>;AccountKey=<BLOB_ACCOUNT_KEY>;EndpointSuffix=core.usgovcloudapi.net"
         container => "insights-activity-logs"
         registry_create_policy => "start_over"
         codec => "json"
         addall => true
         path_filters => ['**/*.json']
         addfilename => true
         prefix => "resourceId=/"
         # Possible options: `do_not_break`, `with_head_tail`, `without_head_tail`
         interval => 5
     }
 }

filter {
    json {
        source => "message"
    }
    mutate {
        add_field => {"short_message" => ["This is short message"]}
        add_field => { "host" => "127.0.0.1" }
    }
    date {
        match => ["unixtimestamp", "UNIX"]
    }
}

output {
    gelf {
        host => "127.0.0.1"
        port => 12201
        protocol => "UDP"
        codec => "json"
    }
}

已测试stdout输出,能正常显示Blob中的所有日志,请问问题出在哪里?该如何将Azure Activity Logs传输至Graylog?

排查与解决方案

1. Docker环境下的网络连通性问题

因为使用docker-compose部署,Logstash容器内的127.0.0.1指向容器自身,而非宿主机的Graylog服务:

  • 解决:将output中的host改为Graylog服务在docker-compose网络中的服务名(比如Graylog容器的service name,如graylog),或者宿主机的局域网IP。如果Graylog和Logstash在同一个docker-compose栈中,直接用服务名即可实现容器间通信。

2. GELF字段规范问题

Graylog的GELF协议要求short_message和host为字符串类型,你的配置存在字段格式错误:

  • 将short_message的数组格式改为纯字符串:
    mutate {
        add_field => {"short_message" => "This is short message"}
        add_field => { "host" => "azure-activity-log-source" } # 建议用有意义的标识,而非127.0.0.1
    }
    

3. JSON重复解析问题

输入端已配置codec => "json",表示已将Blob中的JSON内容解析为Logstash字段,但filter中又执行了一次json { source => "message" },会导致字段解析混乱:

  • 解决:要么删除filter中的json插件,要么将输入端的codec => "json"改为codec => "plain",保留filter中的json解析逻辑,避免重复解析。

4. 日期字段匹配错误

Azure Activity Logs的时间字段为eventTimestamp(ISO8601格式),而非配置中的unixtimestamp,不存在的字段会导致date插件报错,事件被丢弃:

  • 修改date插件配置:
    date {
        match => ["eventTimestamp", "ISO8601"]
    }
    

5. 查看Logstash日志定位错误

通过docker命令查看Logstash容器日志,获取具体报错信息:

docker-compose logs logstash

常见错误包括连接超时、字段缺失、协议不兼容等,日志会给出明确提示。

6. Graylog GELF输入配置验证

  • 确认Graylog的GELF UDP输入已启用,监听端口为12201;
  • 检查Graylog所在容器的端口映射,或docker-compose网络规则,确保Logstash容器能访问该端口;
  • 确认Graylog的安全组/防火墙规则允许来自Logstash的UDP流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:45:28