Azure应用日志转发至ELK的配置方法咨询
我之前在Azure环境里遇到过几乎一模一样的问题——用Log Analytics解析自定义日志总是踩坑,后来部署ELK解决了,把我整理的实操步骤分享给你:
一、Azure上部署ELK的前置准备
- 先创建Azure虚拟机:推荐选Ubuntu 20.04/22.04系统,基础配置至少2核4G(如果你的应用日志量较大,建议升级到4核8G避免性能瓶颈)
- 配置网络安全组规则:开放以下端口的入站访问,方便后续组件通信和管理
- 5601(Kibana可视化界面)
- 9200(Elasticsearch API端口)
- 5044(Filebeat向Logstash传输日志的端口)
- 安装Java环境:Elasticsearch依赖Java,推荐安装OpenJDK 11,执行命令:
sudo apt update && sudo apt install openjdk-11-jdk -y
二、ELK核心配置(重点解决自定义日志解析)
1. Elasticsearch基础配置
安装完成后,修改/etc/elasticsearch/elasticsearch.yml,确保以下关键配置正确:
network.host: 0.0.0.0 # 允许外部访问 discovery.type: single-node # 单节点部署(生产环境建议集群) http.port: 9200
启动并设置开机自启:
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
2. Logstash配置(核心:自定义日志解析)
创建自定义配置文件/etc/logstash/conf.d/azure-app-logs.conf,根据你的自定义日志格式调整filter部分:
场景1:自定义JSON格式日志
input { beats { port => 5044 # 接收Filebeat的日志 } } filter { # 直接解析JSON格式的日志内容 json { source => "message" # 日志原始内容在message字段 target => "custom_log_details" # 解析后的数据存入这个字段 } # 提取日志时间(如果JSON里有时间字段) date { match => [ "custom_log_details.timestamp", "ISO8601" ] target => "@timestamp" } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "azure-app-logs-%{+YYYY.MM.dd}" # 按日期分索引 } }
场景2:自定义文本格式日志(例如[2024-05-20 14:30:00] [ERROR] Payment failed: order123)
input { beats { port => 5044 } } filter { # 用grok正则解析自定义文本格式 grok { match => { "message" => "\[%{TIMESTAMP_ISO8601:log_time}\] \[%{LOGLEVEL:log_level}\] %{GREEDYDATA:log_content}" } } # 把解析出的时间转为Elasticsearch标准时间 date { match => [ "log_time", "yyyy-MM-dd HH:mm:ss" ] target => "@timestamp" } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "azure-app-logs-%{+YYYY.MM.dd}" } }
启动Logstash并设置开机自启:
sudo systemctl start logstash sudo systemctl enable logstash
3. Kibana配置
修改/etc/kibana/kibana.yml:
server.host: "0.0.0.0" # 允许外部访问 elasticsearch.hosts: ["http://localhost:9200"]
启动并设置开机自启:
sudo systemctl start kibana sudo systemctl enable kibana
4. Filebeat配置(收集Azure应用日志)
根据你的应用部署方式选择配置:
方式1:应用部署在Azure虚拟机上
修改/etc/filebeat/filebeat.yml:
filebeat.inputs: - type: filestream enabled: true paths: - /var/log/your-app/custom-*.log # 替换成你的应用自定义日志路径 output.logstash: hosts: ["<你的ELK虚拟机公网IP>:5044"] # 替换为ELK虚拟机的IP setup.kibana: host: "<你的ELK虚拟机公网IP>:5601"
方式2:应用部署在Azure App Service上
App Service的日志默认存在/home/LogFiles/Application/目录,你可以通过自定义启动脚本安装Filebeat,核心配置示例:
filebeat.inputs: - type: filestream enabled: true paths: - /home/LogFiles/Application/*.log output.logstash: hosts: ["<你的ELK虚拟机公网IP>:5044"]
启动Filebeat并设置开机自启:
sudo systemctl start filebeat sudo systemctl enable filebeat
三、集成验证与调试
- 访问Kibana界面:在浏览器输入
http://<ELK虚拟机公网IP>:5601,创建索引模式(匹配azure-app-logs-*) - 进入Discover页面,查看是否能看到解析后的自定义日志
- 如果日志未正常显示,检查以下日志排查问题:
- Logstash日志:
/var/log/logstash/logstash-plain.log - Filebeat日志:
/var/log/filebeat/filebeat.log - Elasticsearch日志:
/var/log/elasticsearch/elasticsearch.log
- Logstash日志:
四、额外优化建议
- 如果日志量很大,可以开启Elasticsearch的索引生命周期管理(ILM),自动删除旧日志
- 给ELK虚拟机配置磁盘加密,符合Azure安全规范
- 生产环境建议部署ELK集群,提升可用性和性能
内容的提问来源于stack exchange,提问作者Homewrecker
相关产品推荐
相关产品推荐

