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
相关产品推荐
相关产品推荐

