背景:由于C端用户增多,我们需要有一款针对用户的日志系统,而不是登录容器分析日志,从而提高效率,快速定位问题
分析: 由于在上家公司接触到kibana,对查询语法和使用有一些基本认识,查询资料发现要搭建kibana,需要同时安装elasticsearch和filebeat
- elasticsearch:分布式实时搜索分析引擎,用作全文搜索,结构化搜索和分析搜索,可以用来处理大数据量
- kibana:基于web界面,使用户能够直观地查看,分析和可视化存储在elasticsearch中的数据
- filebeat:轻量级日志采集器,用于转发和集中日志中的数据
Step1: 安装
使用dockerc-compose 搭建【此处省略docker-compose的安装】
docker-compose.yml 【注意:elasticsearch和kibana和filebeat最好使用同一个版本】
version: '3.7'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 # 使用你需要的版本
container_name: elasticsearch-lican
environment:
- node.name=elasticsearch
- discovery.type=single-node # 单节点模式,适合测试和开发环境
- "xpack.security.enabled=false" # 如果不需要X-Pack安全特性,可以禁用它
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置JVM内存
ports:
- "9200:9200" # 映射Elasticsearch的HTTP端口到宿主机的9200端口
- "9300:9300" # 映射Elasticsearch的TCP传输端口(用于集群节点间的通信)
volumes:
- data:/usr/share/elasticsearch/data # 将数据保存在一个名为data的卷中,以便在容器停止后数据不会丢失
kibana:
image: docker.elastic.co/kibana/kibana:7.17.3
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- I18N_LOCALE=zh-CN // 配置中文
ports:
- "5601:5601"
depends_on:
- elasticsearch
filebeat:
image: docker.elastic.co/beats/filebeat:7.17.3
container_name: filebeat
user: "root" # 可能需要root权限来读取日志文件
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro # 配置文件
- /var/log:/var/log:ro # 假设你的日志文件在/var/log目录下
- /data/docker/containers:/docker/ # 映射目录
depends_on:
- elasticsearch
volumes:
data:
driver: local
配置好编排文件后,启动
docker-compose up -d; // -d:后台启动
docker-compose ps; // 查询运行状态
当发现以下界面,表示安装并启动成功

打开浏览器,通过服务器ip:端口访问,查看服务运行状态【请配置服务器端口的安全组】
访问http://localhost:9200,出现以下界面,表示elasticsearch运行成功

访问http://localhost:5601,出现以下界面,表示kibana运行成功

Step2: filebeat采集日志
配置filebeat.yml 配置文件
在dockerc-compose.yml文件中配置了filebeat的挂载目录,配置的是当前目录映射镜像内配置文件目录
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro # 配置文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log # 读取/var/log目录下的所有.log文件
fields:
log_source: filebeat_container
tags: ["system_log"]
- type: log
enabled: true
paths:
- /docker/6a53835ee69299075330327bd4bb712b69cf7f55a382a6647ba631d40d335321/*.log # 系统日志
fields:
log_type: system
tags: ["brewing-bigdata"]
setup.template.name: "filebeat-%{[agent.version]}"
setup.template.pattern: "filebeat-%{[agent.version]}-*"
3setup.template.json.sha1: "" # 可选,如果你知道模板文件的SHA1哈希值
output.elasticsearch:
hosts: ["http://120.79.80.2:9200"]
indices:
- index: "system_log-%{[agent.version]}-%{+yyyy.MM.dd}"
when.contains:
tags: "system_log"
- index: "brewing_bigdata-%{[agent.version]}-%{+yyyy.MM.dd}"
when.contains:
tags: "brewing-bigdata"
setup.kibana:
host: "kibana:5601"
配置文件的inputs和outputs为设置索引并关联采集日志目录的地方,可以为多组,配置完成后,重启服务
docker-compose down;docker-compose up -d;
在服务器上执行 docker logs -f -n 100 filebeat 查看运行日志,无明显错误,表示filebeat运行成功

Step3: 关联elasticsearch和filebeat索引
由于配置的filebeat索引是一个动态索引,日志采集后,需要进入elastcisearch中进行关联
访问 http://localhost:5601




创建完成之后,就可以在索引栏这里更换索引了,查看filebeat在对应日志目录中采集到的日志啦~

此时,我就可以使用KQL语法搜索日志了
