HoRain云--5分钟搭建高效ELK日志系统
本文介绍了使用Docker搭建ELK(Elasticsearch+Logstash+Kibana)日志管理系统的完整流程。主要内容包括:1)通过Docker Compose部署ELK各组件,包含详细配置说明;2)Logstash管道配置实现日志接收、处理和存储;3)使用Filebeat采集系统日志及SpringBoot应用集成方案;4)Kibana可视化配置方法,包括索引创建、图表制作和仪表盘搭建
🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
使用 Docker 搭建 ELK(Elasticsearch, Logstash, Kibana)栈进行日志采集和可视化,能让你高效地集中管理和分析日志。下面我将为你说明 ELK 的核心组件、搭建步骤、日志配置和可视化方法。
组件 |
主要功能 |
在日志流中的角色 |
---|---|---|
Elasticsearch |
分布式搜索和分析引擎,提供高速检索和强大的数据分析能力。 |
数据存储与索引:存储和索引来自 Logstash 的结构化日志数据。 |
Logstash |
数据收集、解析、转换和传输管道。 |
日志处理:接收、解析和过滤日志,然后发送给 Elasticsearch。 |
Kibana |
数据可视化平台,用于探索、分析和可视化 Elasticsearch 中的数据。 |
日志展示:通过图表和仪表盘展示日志数据。 |
Filebeat |
轻量级日志数据采集器,将日志发送到 Logstash 或 Elasticsearch。 |
日志采集:在主机上采集日志文件并转发给 Logstash。 |
📦 环境准备与部署
部署前,请确保服务器已安装 Docker 和 Docker Compose。
1. 初始化目录与配置文件
首先创建必要的目录和配置文件,以便挂载到容器中,持久化数据和配置。
# 创建 ELK 各组件所需的目录和配置文件存放处
mkdir -p /opt/monitor/elk/{elasticsearch,logstash/pipeline,kibana,filebeat}
cd /opt/monitor/elk
2. 创建 Docker Compose 文件
使用 Docker Compose 能方便地定义和管理多个服务。下面是一个详细的 docker-compose.yml
示例:
version: '3'
services:
elasticsearch:
image: elasticsearch:8.17.2
container_name: elk_es
environment:
- TZ=Asia/Shanghai
- node.name=es-node-1
- cluster.name=elk-docker
- discovery.type=single-node
- ELASTIC_PASSWORD=YourStrongPassword2025 # 建议修改为强密码
- ES_JAVA_OPTS=-Xms1g -Xmx1g # 根据服务器内存调整
- xpack.security.enabled=false # 测试环境可关闭安全认证
- xpack.security.http.ssl.enabled=false
volumes:
- es-data:/usr/share/elasticsearch/data # 挂载数据卷,防止数据丢失
ports:
- "9200:9200" # Elasticsearch HTTP API 端口
networks:
- elk-net
deploy:
resources:
limits:
memory: 2.5G
cpus: '1.5'
kibana:
image: kibana:8.17.2
container_name: elk_kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- TZ=Asia/Shanghai
ports:
- "5601:5601" # Kibana 访问端口
volumes:
- kibana-data:/usr/share/kibana/data
depends_on:
- elasticsearch
networks:
- elk-net
deploy:
resources:
limits:
memory: 1.5G
cpus: '0.5'
logstash:
image: logstash:8.17.3
container_name: elk_logstash
environment:
- LS_JAVA_OPTS=-Xms1g -Xmx1g # Logstash JVM 内存设置
- TZ=Asia/Shanghai
- pipeline.workers=2 # 处理线程数,可根据CPU核心调整
- pipeline.batch.size=125
volumes:
- ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf # 挂载Logstash配置文件
- logstash-data:/usr/share/logstash/data
ports:
- "5044:5044" # Logstash Beats 输入端口,用于接收Filebeat日志
networks:
- elk-net
deploy:
resources:
limits:
memory: 1G
cpus: '0.5'
depends_on:
- elasticsearch
# 可选:使用Filebeat采集日志
filebeat:
image: elastic/filebeat:8.17.2
container_name: elk_filebeat
user: root
volumes:
- ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- /var/log:/host/var/log:ro # 挂宿主机日志目录,根据实际情况修改
- ./filebeat/modules.d:/usr/share/filebeat/modules.d:ro
- filebeat-data:/usr/share/filebeat/data
depends_on:
- logstash
networks:
- elk-net
command: [
"-e", "-E", "filebeat.config.modules.path=/usr/share/filebeat/modules.d/*.yml",
"-E", "filebeat.config.modules.reload.enabled=false",
"-E", "output.logstash.hosts=[\"logstash:5044\"]" # 指定Logstash为输出
]
deploy:
resources:
limits:
memory: 500M
cpus: '0.25'
volumes:
es-data:
kibana-data:
logstash-data:
filebeat-data:
networks:
elk-net:
driver: bridge
3. 配置 Logstash 管道 (Pipeline)
Logstash 需要配置文件来定义如何处理日志。创建 logstash/pipeline/logstash.conf
:
input {
tcp {
port => 5044 # 监听5044端口,接收Filebeat或其它Beats输入
codec => json_lines # 使用json_lines编解码器,解析JSON格式的日志
}
}
filter {
# 这里可以添加丰富的过滤器来处理日志
# 例如使用grok解析非结构化日志,date解析时间戳等
# grok {
# match => { "message" => "%{COMBINEDAPACHELOG}" }
# }
# date {
# match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
# }
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"] # 输出到Elasticsearch
index => "logs-%{+YYYY.MM.dd}" # 定义索引名称,按日期滚动
}
}
4. 启动 ELK 栈
一切就绪后,使用 Docker Compose 启动所有服务:
docker-compose up -d
启动后,可以通过 docker-compose logs -f
查看启动日志,排查可能的问题。Elasticsearch 完全启动可能需要几分钟。
📨 配置日志采集
ELK 启动后,需要将应用或系统的日志发送过来。
使用 Filebeat 采集系统日志
Filebeat 非常适合采集服务器上的日志文件。 上述 Docker Compose 中已包含了 Filebeat 服务,你需要配置 filebeat/filebeat.yml
来指定采集哪些日志:
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /host/var/log/*.log # 采集系统日志,对应挂载的宿主机路径
- /host/var/log/tomcat/* # 采集Tomcat日志,根据实际情况修改
- /host/var/log/mysql/*.log # 采集MySQL日志,根据实际情况修改
output.logstash:
hosts: ["logstash:5044"] # 将事件发送到Logstash
Spring Boot 应用集成 Logstash
对于 Java 应用,可以在 pom.xml
中添加依赖:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.2</version>
</dependency>
然后在 logback-spring.xml
中配置 Logback,将日志直接以 JSON 格式输出到 Logstash:
<configuration>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>your-logstash-server-ip:5044</destination> <!-- 修改为你的Logstash服务器地址和端口 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
📊 Kibana 可视化配置
日志数据进入 Elasticsearch 后,就可以在 Kibana 中进行分析和可视化了。
-
访问 Kibana:在浏览器中打开
http://your-server-ip:5601
。 -
创建索引模式 (Index Pattern):
-
进入 Kibana 后,点击左侧导航栏的 Management -> Stack Management -> Kibana -> Index Patterns。
-
点击 Create index pattern。
-
在步骤1中,输入索引模式名称,例如
logs-*
,以匹配 Logstash 输出的索引。 -
在步骤2中,选择时间字段(如
@timestamp
),然后点击 Create index pattern。
-
-
探索日志:点击左侧 Discover,选择你创建的索引模式,就可以看到日志数据了。你可以在这里进行搜索、过滤。
-
创建可视化图表 (Visualizations):
-
点击左侧 Visualize -> Create new visualization。
-
选择图表类型(如垂直条形图、饼图、折线图等)。
-
选择你创建的索引模式作为数据源。
-
配置指标(Metrics)和桶(Buckets)。例如:
-
Y轴指标:选择计算方式,如日志数量(Count)、某字段的平均值等。
-
X轴桶:选择 Terms 并指定一个字段(如
log.level
来按日志级别统计),然后拆分切片。
-
-
配置完成后点击 Save。
-
-
构建仪表盘 (Dashboard):
-
点击左侧 Dashboard -> Create new dashboard。
-
点击 Add an existing visualization 或 Create new visualization,将之前创建的可视化图表添加到仪表盘中。
-
调整布局后,点击 Save 保存仪表盘,便于后续直接查看。
-
⚠️ 注意事项
-
性能与资源:ELK 对内存和 CPU 有一定要求,请根据服务器资源和日志量调整 Docker Compose 中的资源限制 (
deploy.resources.limits
)。 对于生产环境,Elasticsearch 可能需要部署集群。 -
安全性:上述示例为了方便演示,禁用了 Elasticsearch 的安全特性(
xpack.security.enabled=false
)。在生产环境中,务必启用安全配置,并为 Elasticsearch 和 Kibana 设置强密码。 -
数据持久化:务必通过 Docker 卷(volumes)持久化 Elasticsearch 等重要数据,避免容器重启造成数据丢失。
-
时区问题:如果日志时间显示不对,可在 Logstash 的 filter 中使用
date
插件修正时区,或在容器环境中设置TZ=Asia/Shanghai
。
通过以上步骤,你应该能够成功搭建起一套基础的 ELK 日志管理系统。ELK 的功能非常强大且复杂,你可以在此基础上继续探索更高级的用法,如更复杂的 Logstash 过滤规则、Kibana 警报设置等。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐
所有评论(0)