前言
最近在折腾 ELK 日志平台,它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。
专门实操了一波,这玩意看起来简单,但是里面的流程步骤还是很多的,而且遇到了很多坑。在此记录和总结下。
本文亮点:一步一图、带有实操案例、踩坑记录、与开发环境的日志结合,反映真实的日志场景。
日志收集平台有多种组合方式:
- ELK Stack 方式:Elasticsearch + Logstash + Filebeat + Kibana,业界最常见的架构。
- Elasticsearch + Logstash + Kafka + Kibana,用上了消息中间件,但里面也有很多坑,放到下一讲。
这次先讲解 ELK Stack 的方式,这种方式对我们的代码无侵入,核心思想就是收集磁盘的日志文件,然后导入到 Elasticsearch。
比如我们的应用系统通过 logback 把日志写入到磁盘文件,然后通过这一套组合的中间件就能把日志采集起来供我们查询使用了。
整体的架构图如下所示:
流程如下:
- 先使用 Filebeat 把日志收集起来,然后把数据再传给 Logstash。
- 通过 Logstash 强大的数据清洗功能。
- 最终把数据写入到 Elasticsearch 中。
- 并由 Kibana 进行可视化。
温馨提示:以下案例都在一台 ubuntu 虚拟机上完成,内存分配了 6G。
一、部署 Elasticsearch
数据库获取 elasticsearch 镜像:
docker pull elasticsearch:7.7.1
创建挂载目录:
mkdir -p /data/elk/es/{config,data,logs}
赋予权限:
chown -R 1000:1000 /data/elk/es
创建配置文件:
cd /data/elk/es/config
touch elasticsearch.yml
-----------------------配置内容----------------------------------
cluster.name: "my-es"
network.host: 0.0.0.0
http.port: 9200
启动 elasticsearch 容器:
docker run -it -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e "discovery.type=single-node" --restart=always -v /data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/elk/es/data:/usr/share/elasticsearch/data -v /data/elk/es/logs:/usr/share/elasticsearch/logs elasticsearch:7.7.1
验证 elasticsearch 是否启动成功:
curl http://localhost:9200
二、部署 Kibana 可视化工具
2.1 安装 Kibana
获取 kibana 镜像:
docker pull kibana:7.7.1
获取elasticsearch容器 ip:
docker inspect --format '{
{ .NetworkSettings.IPAddress }}' es
结果:172.17.0.2;
创建 kibana 配置文件:
mkdir -p /data/elk