跳到主要内容

轻量级日志收集方案

背景

为线上日志提供一个高效的查询工具,方便开发人员快速定位问题。

日志收集方案:

安装环境

创建 docker-compose.yml

version: '3.5'

networks:
zinnet:
driver: bridge

services:
zinc: ## mqtt 服务
image: public.ecr.aws/zinclabs/zinc:latest
environment:
- TZ=Asia/Shanghai
# - ZINC_DATA_PATH="/data"
- ZINC_FIRST_ADMIN_USER=admin
- ZINC_FIRST_ADMIN_PASSWORD=123456
- ZINC_PROMETHEUS_ENABLE=true
ports:
- "4080:4080"
# volumes:
# - ./data:/data
networks:
- zinnet
# restart: always

启动服务

docker-compose up -d

就可以访问

http://localhost:4080/ui/search

可以发送一个日志给 zincsearch

curl \
-u admin:123456 \
-XPUT \
-d '{"author":"Prabhat Sharma"}' \
http://localhost:4080/api/myshinynewindex/_doc
提示

这里补充一个索引 (_doc) 的概念,索引是一个逻辑概念,它是一个逻辑的容器,可以包含多个文档,每个文档都有一个唯一的 ID,可以通过 ID 来获取文档。索引可以看作是一个数据库,文档可以看作是数据库中的一条记录。

配置日志采集

zinc 只负责建立日志数据的索引,并不负责数据的采集工作,所以还需要配置一个采集工具,这里使用的是 Filebeat,它是一个轻量级的日志采集工具。

安装配置

version: '3.5'

networks:
zinnet:
driver: bridge
services:
zinc: ## mqtt 服务
container_name: zinc
image: public.ecr.aws/zinclabs/zinc:latest
environment:
- TZ=Asia/Shanghai
# - ZINC_DATA_PATH="/data"
- ZINC_FIRST_ADMIN_USER=admin
- ZINC_FIRST_ADMIN_PASSWORD=123456
- ZINC_PROMETHEUS_ENABLE=true
ports:
- "4080:4080"
# volumes:
# - ./data:/data
networks:
- zinnet
# restart: always
filebeat:
container_name: filebeat
image: docker.elastic.co/beats/filebeat:8.6.1
volumes:
- 本地日志地址/log:/var/log/biz/
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
networks:
- zinnet
# 通过 depends_on 告诉 docker-compose 当前服务启动之前先要把 depends_on 指定的服务启动起来才行。
depends_on:
- zinc

Filebeat 并不依赖于 ElasticSearch,可以单独存在。所以可以单独使用 Filebeat 进行日志的上报和搜集,这里直接把 Filebeat 指向 zincsearch 服务。

setup.ilm.enabled: false
setup.template.name: "my-log"
setup.template.pattern: "my-*"

filebeat.inputs:
- type: log
enabled: true
json:
keys_under_root: true
# 必选项,读取文件的路径,基于 glob 匹配语法。
paths:
- /var/log/biz/*.log
processors:
- drop_fields:
fields: ["ecs", "host", "agent", "input", "kind"]

output.elasticsearch:
hosts: ["http://zinc:4080"] # 这个填写的是容器名,不是网络名
path: "/es/"
index: "biz-log-%{+yyyy.MM.dd}" # 以天为单位创建索引
username: "admin"
password: "123456"

References