Docker笔记(十):使用Docker来搭建一套ELK日志分析系统

转载 【空山新雨】 2019/9/9 21:25:47

一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储、索引日志, logstash —— 可用于日志传输、转换,kibana —— WebUI,将日志可视化),发现最新版已到7.4了。所以别问程序员为什么这么忙?因为不是在加班就是在学习新框架中。 本文整理了使用Docker来

一段时间没关注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.yml

  # 在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.yml

  #xpack.license.self_generated.type: trial
  xpack.license.self_generated.type: basic

 

修改logstash配置文件,设置es的用户名密码

vim logstash/config/logstash.yml

  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.yml

  ## 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.yml

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    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.yml:/usr/share/filebeat/filebeat.yml: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框架的整个过程,供参考。


—————————————————————————————
作者:空山新雨
欢迎关注我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号)

 

上一篇:Docker详解(一)

下一篇:Docker搭建disconf环境,三部曲之三:细说搭建过程

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    扫一扫关注最新编程教程