ELK 8.4.3 docker 保姆级安装部署详细步骤

237阅读模式

一、前言

- 日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。

二、ELK简介

  • ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
  • Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。在elasticsearch中,所有节点的数据是均等的。
  • Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
  • Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
  • Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

三、版本说明

  1. Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
  2. ELK常见的几种架构:

1) Elasticsearch + Logstash + Kibana文章源自懂站帝-http://www.sfdkj.com/38605.html

这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。文章源自懂站帝-http://www.sfdkj.com/38605.html

2) Elasticsearch + Logstash + filebeat + Kibana文章源自懂站帝-http://www.sfdkj.com/38605.html

与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。文章源自懂站帝-http://www.sfdkj.com/38605.html

3) Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如RabbitMQ) + Kibana文章源自懂站帝-http://www.sfdkj.com/38605.html

这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。文章源自懂站帝-http://www.sfdkj.com/38605.html

本次安装ELK根据自身需求选择了Elasticsearch + Logstash + filebeat + Kibana架构文章源自懂站帝-http://www.sfdkj.com/38605.html

四、安装部署

  • 创建docker网络:
docker network create -d bridge elastic
  • Elasticsearch

1) 版本:8.4.3文章源自懂站帝-http://www.sfdkj.com/38605.html

2) 拉取docker镜像文章源自懂站帝-http://www.sfdkj.com/38605.html

docker pull elasticsearch:8.4.3

3) 第一次执行docker脚本文章源自懂站帝-http://www.sfdkj.com/38605.html

docker run -it \
-p 9200:9200 \
-p 9300:9300 \
--name elasticsearch \
--net elastic \
-e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
-e "discovery.type=single-node" \
-e LANG=C.UTF-8 \
-e LC_ALL=C.UTF-8 \
elasticsearch:8.4.3

注意第一次执行脚本不要加-d这个参数,否则看不到服务首次运行时生成的随机密码和随机enrollment token文章源自懂站帝-http://www.sfdkj.com/38605.html

4) 可以看到控制台的信息,找到这个信息并保存下来文章源自懂站帝-http://www.sfdkj.com/38605.html

ELK 8.4.3 docker 保姆级安装部署详细步骤

elasticsearch服务首次启动时需要保存的信息文章源自懂站帝-http://www.sfdkj.com/38605.html

5) 创建Elasticsearch挂载目录文章源自懂站帝-http://www.sfdkj.com/38605.html

mkdir /home/xxx/elk8.4.3/elasticsearch

6) 给创建的文件夹授权文章源自懂站帝-http://www.sfdkj.com/38605.html

sudo chown -R 1000:1000 /home/xxx/elk8.4.3/elasticsearch

7) 将容器内的文件复制到主机上文章源自懂站帝-http://www.sfdkj.com/38605.html

docker cp elasticsearch:/usr/share/elasticsearch/config /home/xxx/elk8.4.3/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/data /home/xxx/elk8.4.3/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/plugins /home/xxx/elk8.4.3/elasticsearch/
docker cp elasticsearch:/usr/share/elasticsearch/logs /home/xxx/elk8.4.3/elasticsearch/

8) 删除容器文章源自懂站帝-http://www.sfdkj.com/38605.html

docker rm -f elasticsearch

9) 修改docker脚本,增加-v挂载目录和-d参数文章源自懂站帝-http://www.sfdkj.com/38605.html

docker run -it \
    -d \
    -p 9200:9200 \
    -p 9300:9300 \
    --name elasticsearch \
    --net elastic \
    -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
    -e "discovery.type=single-node" \
    -e LANG=C.UTF-8 \
    -e LC_ALL=C.UTF-8 \
    -v /home/xxx/elk8.4.3/elasticsearch/config:/usr/share/elasticsearch/config \
    -v /home/xxx/elk8.4.3/elasticsearch/data:/usr/share/elasticsearch/data \
    -v /home/xxx/elk8.4.3/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
    -v /home/xxx/elk8.4.3/elasticsearch/logs:/usr/share/elasticsearch/logs \
    elasticsearch:8.4.3

10) 修改配置
/home/xxx/elk8.4.3/elasticsearch/config/elasticsearch.yml:
文章源自懂站帝-http://www.sfdkj.com/38605.html

增加:
xpack.monitoring.collection.enabled: true
文章源自懂站帝-http://www.sfdkj.com/38605.html

说明:添加这个配置以后在kibana中才会显示联机状态,否则会显示脱机状态

ELK 8.4.3 docker 保姆级安装部署详细步骤

参考配置

重启容器:

docker restart elasticsearch

11) Elasticsearch8以上默认开启了X-Pack 安全功能

说明:请求Elasticsearch必须使用https

测试:https://ip:9200

ELK 8.4.3 docker 保姆级安装部署详细步骤

用户名就是:elastic

密码在第一次启动时保存下来的信息中查找

然后看到这种信息说明启动成功了

ELK 8.4.3 docker 保姆级安装部署详细步骤
  • Kibana

1) 版本:8.4.3

2) 拉取镜像

docker pull kibana:8.4.3

3) 第一次执行docker启动脚本

docker run -it \
    -d \
    --restart=always \
    --log-driver json-file \
    --log-opt max-size=100m \
    --log-opt max-file=2 \
    --name kibana \
    -p 5601:5601 \
    --net elastic \
    kibana:8.4.3

4) 创建kibana挂载目录

mkdir /home/xxx/elk8.4.3/kibana

5) 给创建的文件授权

sudo chown -R 1000:1000 /home/xxx/elk8.4.3/kibana

6) 将容器内的文件复制到主机上

docker cp kibana:/usr/share/kibana/config /home/xxx/elk8.4.3/kibana/
docker cp kibana:/usr/share/kibana/data /home/xxx/elk8.4.3/kibana/
docker cp kibana:/usr/share/kibana/plugins /home/xxx/elk8.4.3/kibana/
docker cp kibana:/usr/share/kibana/logs /home/xxx/elk8.4.3/kibana/

7) 修改配置文件
/home/xxx/elk8.4.3/kibana/config/kibana.yml:

增加:i18n.locale: "zh-CN"

修改:elasticsearch.hosts: ['https://172.20.0.2:9200'],将IP改成elasticsearch的docker ip,注意一定要用https

修改:xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ['https://172.20.0.2:9200'], ca_trusted_fingerprint: xxxxxxxxxx}]

将IP改成elasticsearch的docker ip,注意一定要用https

ELK 8.4.3 docker 保姆级安装部署详细步骤

8) 删除容器

docker rm -f kibana

9) 修改docker启动脚本,增加挂载目录

docker run -it \
    -d \
    --restart=always \
    --log-driver json-file \
    --log-opt max-size=100m \
    --log-opt max-file=2 \
    --name kibana \
    -p 5601:5601 \
    --net elastic \
    -v /home/xxx/elk8.4.3/kibana/config:/usr/share/kibana/config \
    -v /home/xxx/elk8.4.3/kibana/data:/usr/share/kibana/data \
    -v /home/xxx/elk8.4.3/kibana/plugins:/usr/share/kibana/plugins \
    -v /home/xxx/elk8.4.3/kibana/logs:/usr/share/kibana/logs \
    kibana:8.4.3

10) 查看kibana日志

docker logs -f kibana

11) 打开浏览器http://ip:5601,使用elastic用户的密码进行认证

第一次访问改链接的时候需要填入令牌,令牌就是第一次启动elasticsearch时保存的信息中的token,注意这个token只有30分钟的有效期,如果过期了只能进入容器重置token

ELK 8.4.3 docker 保姆级安装部署详细步骤

重置token:进入容器执行

/bin/elasticsearch-create-enrollment-token -s kibana --url "https://127.0.0.1:9200"

12) 输入token以后会看到一个验证码框,验证码从kibana的日志中获取

ELK 8.4.3 docker 保姆级安装部署详细步骤

13) 输入用户名:elastic,密码:第一次启动elasticsearch保存的密码

ELK 8.4.3 docker 保姆级安装部署详细步骤
  • Logstash

1) 版本:8.4.3

2) 拉取镜像

docker pull logstash:8.4.3

3) 第一次执行docker启动脚本

docker run -it \
    -d \
    --name logstash \
    -p 9600:9600 \
    -p 5044:5044 \
    --net elastic \
    logstash:8.4.3

4) 创建logstash挂载目录

mkdir /home/xxx/elk8.4.3/logstash

5) 给创建的文件授权

sudo chown -R 1000:1000 /home/xxx/elk8.4.3/logstash

6) 将容器内的文件复制到主机上

docker cp logstash:/usr/share/logstash/config /home/xxx/elk8.4.3/logstash/
docker cp logstash:/usr/share/logstash/pipeline /home/xxx/elk8.4.3/logstash/

7) 将
/home/xxx/elk8.4.3/logstash/elasticsearch/config/certs复制到/home/xxx/elk8.4.3/logstash/config/certs

sudo cp /home/xxx/elk8.4.3/logstash/elasticsearch/config/certs /home/xxx/elk8.4.3/logstash/config/certs

8) 修改配置
/home/xxx/elk8.4.3/logstash/config/logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: [ "https://172.20.0.2:9200" ]
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "第一次启动elasticsearch是保存的信息中查找"
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/config/certs/http_ca.crt"
xpack.monitoring.elasticsearch.ssl.ca_trusted_fingerprint: "第一次启动elasticsearch是保存的信息中查找"

注意: https://172.20.0.2:9200,必须是https,IP是elasticsearch的docker IP

9) 修改配置
/home/xxx/elk8.4.3/logstash/pipeline/logstash.conf

input {
  beats {
  	port => 5044
  }
}

filter {
  date {
  	match => [ "@timestamp", "yyyy-MM-dd HH:mm:ss Z" ]
  }
  mutate {
  	remove_field => ["@version", "agent", "cloud", "host", "input", "log", "tags", "_index", "_source", "ecs", "event"]
  }
}

output {
  elasticsearch {
    hosts => ["https://172.20.0.2:9200"]
    index => "server-%{+YYYY.MM.dd}"
    ssl => true
    ssl_certificate_verification => false
    cacert => "/usr/share/logstash/config/certs/http_ca.crt"
    ca_trusted_fingerprint => "第一次启动elasticsearch是保存的信息中查找"
    user => "elastic"
    password => "第一次启动elasticsearch是保存的信息中查找"
  }
}

注意: https://172.20.0.2:9200,必须是https,IP是elasticsearch的docker IP

index 是索引名称

10) 删除容器

docker rm -f logstash

11) 修改docker启动命令,加上-v挂载目录

docker run -it \
    -d \
    --name logstash \
    -p 9600:9600 \
    -p 5044:5044 \
    --net elastic \
    -v /home/appuser/docker-images/elk8_4_3/logstash/config:/usr/share/logstash/config \
    -v /home/appuser/docker-images/elk8_4_3/logstash/pipeline:/usr/share/logstash/pipeline \
    logstash:8.4.3
  • filebeat

1) 版本:8.4.3

2) 拉取镜像

docker pull elastic/filebeat:8.4.3

3) 第一次执行docker启动脚本

docker run -it \
    -d \
    --name filebeat \
    --network host \
    -e TZ=Asia/Shanghai \
    elastic/filebeat:8.4.3 \
		filebeat -e -c /usr/share/filebeat/filebeat.yml

4) 创建filebeat挂载目录

mkdir /home/xxx/elk8.4.3/filebeat

5) 给创建的文件授权

sudo chown -R 1000:1000 /home/xxx/elk8.4.3/filebeat

6) 将容器内的文件复制到主机上

docker cp filebeat:/usr/share/filebeat/filebeat.yml /home/xxx/elk8.4.3/filebeat/
docker cp filebeat:/usr/share/filebeat/data /home/xxx/elk8.4.3/filebeat/
docker cp filebeat:/usr/share/filebeat/logs /home/xxx/elk8.4.3/filebeat/

7) 修改配置
/home/xxx/elk8.4.3/filebeat/filebeat.yml

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

output.logstash:
  enabled: true
  # The Logstash hosts
  hosts: ["localhost:5044"]

filebeat.inputs:
  - type: log
  enabled: true
  paths:
    - /usr/share/filebeat/target/*/*/*.log. # 这个路径是需要收集的日志路径,是docker容器中的路径
  scan_frequency: 10s
  exclude_lines: ['HEAD']
  exclude_lines: ['HTTP/1.1']
  multiline.pattern: '^[[:space:]]+(at|\.{3})\b|Exception|捕获异常'
  multiline.negate: false
  multiline.match: after

8) 删除容器

docker rm -f filebeat

9) 修改docker启动脚本,增加-v挂载目录

docker run -it \
    -d \
    --name filebeat \
    --network host \
    -e TZ=Asia/Shanghai \
    -v /home/xxx/log:/usr/share/filebeat/target \
    -v /home/xxx/elk8.4.3/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
    -v /home/xxx/elk8.4.3/filebeat/data:/usr/share/filebeat/data \
    -v /home/xxx/elk8.4.3/filebeat/logs:/usr/share/filebeat/logs \
    elastic/filebeat:8.4.3 \
    filebeat -e -c /usr/share/filebeat/filebeat.yml

注意: -v
/home/xxx/log:/usr/share/filebeat/target 这个是你需要收集的日志目录,需要挂载到容器中

  • 配置完成

1) 在kibana中查看信息

ELK 8.4.3 docker 保姆级安装部署详细步骤

2) 查看索引

ELK 8.4.3 docker 保姆级安装部署详细步骤
ELK 8.4.3 docker 保姆级安装部署详细步骤

如果能看到自己配置的索引说明安装配置成功

3) 查看日志

ELK 8.4.3 docker 保姆级安装部署详细步骤

4) 如果没有你的日志,需要先创建数据视图,选择你创建的索引

ELK 8.4.3 docker 保姆级安装部署详细步骤
懂站帝
  • 本文由 发表于 2022年11月7日 00:29:32
  • 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至395045033@qq.com举报,一经查实,本站将立刻删除。
评论  0  访客  0