一段时间没关注 ELK(Elasticsearch -- 搜索引擎, 可用于存储, 索引日志, logstash -- 可用于日志传输, 转换, kibana -- webUI, 将日志可视化), 发现最新版已到 7.4 了. 所以别问程序员为什么这么忙? 因为不是在加班就是在学习新框架中.
本文整理了使用 Docker 来快速搭建一套 ELK 日志分析系统的方法.
1. 部署 elk
GitHub 上有人整理了一套使用 docker compose 来部署 elk 的配置, 可直接下载使用.
Git clone https://github.com/deviantony/docker-elk.git
如果没有 Git, 那就安装一下 (yum install Git), 或者直接下载 GitHub 仓库的源码包.
当前是基于 7.2.1 版 (docker-elk 目录下. env 文件中定义, 可修改).
调整一下相应的配置.
修改 docker-compose, 设置 es 密码等,
- VIM docker-compose.YAML
- # 在 Elasticsearch 部分设置环境变量, 将 jvm 堆内存增大到了 1g, 设置 es elastic 用户的密码
- environment:
- ES_JAVA_OPTS: "-Xmx1g -Xms1g"
- ELASTIC_PASSWORD: Passw0rd
- # 将 logstash 的端口映射从默认的 5000 改为 5044, 因为后面会用 filebeat, 不改也可以, 对应就行
- ports:
- - "5044:5044"
- - "9600:9600"
- # 将 jvm 内存也增大一点
- environment:
- LS_JAVA_OPTS: "-Xmx512m -Xms512m"
- # 在 volumes 部分增加 es 数据目录的挂载, 对 es 数据持久化, 避免容器销毁数据丢失
- volumes:
- - /mnt/elk/esdata:/usr/share/Elasticsearch/data
注意: 因为 es 容器内部是以 Elasticsearch 用户启动进程的, 所以在做持久化数据目录挂载的时候, 需要将目录权限进行设置, 否则会因为没有访问权限而启动失败. Elasticsearch 的 uid 是 1000, 可以建一个 uid 为 1000 的用户, 然后将目录所有者赋予该用户.
修改 es 配置文件, 将 xpack 从 trial 改为 basic, 禁用付费功能
- VIM Elasticsearch/config/Elasticsearch.YAML
- #xpack.license.self_generated.type: trial
- xpack.license.self_generated.type: basic
修改 logstash 配置文件, 设置 es 的用户名密码
- VIM logstash/config/logstash.YAML
- xpack.monitoring.Elasticsearch.username: elastic
- xpack.monitoring.Elasticsearch.password: Passw0rd
修改 logstash 的 pipeline 配置
- VIM logstash/pipeline/logstash.conf
- # 这里 codec 根据具体情况配置
- input {
- beats {
- port => 5044
- codec => "json"
- }
- }
- ## Add your filters / logstash plugins configuration here
- output {
- Elasticsearch {
- hosts => "elasticsearch:9200"
- index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{ YYYY.MM.dd}"
- user => "elastic"
- password => "Passw0rd"
- }
- }
修改 kibana 配置, 设置 es 密码
- VIM kibana/config/kibana.YAML
- ## X-Pack security credentials
- Elasticsearch.username: elastic
- Elasticsearch.password: Passw0rd
配置调整后, 使用 docker-compose up -d 即可启动 es,logstash,kibana 三个容器. 第一次启动需要下载所有镜像, 会比较慢, 启动完后, 访问 elk 所在服务器 IP:5601 即可进入 kibana 页面.
这里默认是起一个 es 容器, 如果想起多个, 参考: https://github.com/deviantony/docker-elk/wiki/Elasticsearch-cluster
2. 部署 filebeat
filebeat 部署在产生日志的服务器上. 先下载镜像,
docker pull docker.elastic.co/kibana/kibana:7.3.1
下载一个示例配置文件
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.3/deploy/docker/filebeat.docker.yml
修改配置文件
VIM filebeat.docker.YAML
- filebeat.config:
- modules:
- path: ${path.config}/modules.d/*.YAML
- reload.enabled: false
- #filebeat.autodiscover:
- # providers:
- # - type: docker
- # hints.enabled: true
- #processors:
- #- add_cloud_metadata: ~
- #- add_host_metadata: ~
- filebeat.inputs:
- - type: log
- enabled: true
- paths:
- - /var/log/elk/*.log
- output.logstash:
- hosts: ["你的 elk 服务器 IP:5044"]
去掉了一些不必要的配置, 基本就是一个 input, 一个 output.input paths 部分配置你日志所在目录, 注意这里是容器内的目录, 真正服务器的日志目录需要在启动容器时挂载到这里配置的目录.
启动容器
- docker run -d --name filebeat --user=root -v $(pwd)/filebeat.docker.YAML:/usr/share/filebeat/filebeat.YAML:ro \
- -v /mnt/logs/elk/:/var/log/elk/ docker.elastic.co/beats/filebeat:7.3.1 filebeat -e -strict.perms=false
对配置文件及实际日志目录与容器日志目录进行了挂载.
启动成功后, 对应目录下的日志就会通过 filebeat,logstash 传输到 es, 进入 kibana 对日志数据建立索引进行查询了.
3. 总结
前面用 elk 来搭建日志分析系统还是 5.1 版, 两年时间已到 7.4, 配置方式, 包括 UI 风格都做了很大的调整, 很有一种人间一年, 技术圈十载的感觉.
本文整理了基于 Docker 来搭建 ELK 框架的整个过程, 供参考.
-----------------------------
来源: https://www.cnblogs.com/spec-dog/p/11489838.html