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

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
三、集成验证与调试
  1. 访问Kibana界面:在浏览器输入http://<ELK虚拟机公网IP>:5601,创建索引模式(匹配azure-app-logs-*)
  2. 进入Discover页面,查看是否能看到解析后的自定义日志
  3. 如果日志未正常显示,检查以下日志排查问题:
    • Logstash日志:/var/log/logstash/logstash-plain.log
    • Filebeat日志:/var/log/filebeat/filebeat.log
    • Elasticsearch日志:/var/log/elasticsearch/elasticsearch.log
四、额外优化建议
  • 如果日志量很大,可以开启Elasticsearch的索引生命周期管理(ILM),自动删除旧日志
  • 给ELK虚拟机配置磁盘加密,符合Azure安全规范
  • 生产环境建议部署ELK集群,提升可用性和性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:41