实战-搭建ELK日志系统

240 阅读2分钟

技术选型

基于Docker的 ELK日志系统搭建(Elasticsearch+Kibana+Logstash)

利用docker容器化以后,需要考虑如何采集位于Docker容器中的应用程序的打印日志供运维分析。比如SpringBoot应用的日志收集。利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其架构如下图所示

部署版本统一采用7.10.1 (7.x 为最新系列版本)

中间件

Elasticsearch

分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;

Kibana

数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;

Logstash

数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;

部署流程

创建网络(elasticsearch+kibana同一网段)

docker network create es-net

elasticsearch安装

docker pull elasticsearch:7.10.1
docker run -d --name tyjt-elasticsearch -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" -v es-data:/usr/share/elasticsearch/data -v es-plugins:/usr/share/elasticsearch/plugins --privileged --network es-net -p 9200:9200 -p 9300:9300 elasticsearch:7.10.1

elasticsearch 安装验证地址 http://172.26.1.247:9200/

kibana安装

kibana.yml

server.host: "0.0.0.0"
elasticsearch.hosts: ["http://172.26.1.247:9200"]
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"

start.sh

docker pull kibana:7.10.1
docker run -d --name tyjt-kibana -e ELASTICSEARCH_HOSTS=http://tyjt-elasticsearch:9200 --network=es-net -p 5601:5601 -v /home/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.10.1

kibana安装完成验证地址:http://172.26.1.247:5601/app/home#/

logstash安装(这个较复杂)

#先拉取镜像
docker pull logstash:7.10.1
#容器化
docker run -d --name tyjt-logstash -p 5044:5044 logstash:7.10.1
#将logstash 配置文件拷贝到主机
docker cp tyjt-logstash:/usr/share/logstash/config /home/logstash
cd /home/logstash/config && ll

出现下列文件表示ok

修改文件logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: "http://172.26.1.247:9200"  #es地址
#xpack.monitoring.elasticsearch.username: "elastic"  #es xpack账号
#xpack.monitoring.elasticsearch.password: "xxxx"     #es xpack账号
path.config: /usr/share/logstash/config/*.conf
path.logs: /usr/share/logstash/logs

修改logstash-sample.conf

input {
    tcp {
        port => 5044
        codec => "json"
    }
}
output {
     elasticsearch {
        action => "index"
        hosts => ["172.26.1.247:9200"]
        index => "%{[appname]}"
     }
}

编写 start.sh

docker rm -f tyjt-logstash
docker run -p 5044:5044 --name=tyjt-logstash \
  --restart=always --privileged=true\
  -e ES_JAVA_OPTS="-Xms1g -Xmx2g" \
  -v /home/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
  -v /home/logstash/config/logstash-sample.conf:/usr/share/logstash/config/logstash-sample.conf \
  -v /home/logstash/logs:/usr/share/logstash/logs  \
  -d logstash:7.10.1

至此ELK 日志系统搭建完毕