问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

海量日志收集ELK实战(docker部署ELK)&从日志中挖取宝贵数据

创作时间:
2025-03-13 15:18:47
作者:
@小白创作中心

海量日志收集ELK实战(docker部署ELK)&从日志中挖取宝贵数据

引用
CSDN
1.
https://blog.csdn.net/weixin_43025151/article/details/143478453

本文将详细介绍如何使用Docker部署ELK(Elasticsearch、Logstash、Kibana)日志收集系统,并展示如何从日志中挖掘有价值的数据。

一、准备工作

1.1 服务器配置要求

ELK安装服务器配置要求:至少2C4G以上的配置,已安装docker。如果不用docker安装,可以直接使用yum安装。可以从以下网站下载对应的压缩包:

1.2 关闭防火墙

为了简化端口管理,我们需要关闭防火墙:

# 查看防火墙状态
systemctl status firewalld.service
# 关闭防火墙
systemctl stop firewalld.service
# 禁用防火墙
systemctl disable firewalld.service

1.3 创建docker网络

由于需要部署kibana容器,因此需要让es和kibana容器互联,通过docker创建的专门网络进行通信连接:

docker network create elasticsearch-net

二、docker安装elasticsearch

2.1 下载 Elastic Search 镜像

docker pull elasticsearch:7.9.3

2.2 创建宿主机的挂载目录

# 创建宿主机的挂载目录 并放开读写权限
mkdir -p -m 777 /usr/local/docker/elasticsearch/plugins
mkdir -p -m 777 /usr/local/docker/elasticsearch/data
mkdir -p -m 777 /usr/local/docker/elasticsearch/config

2.3 设置宿主机max_map_count

必须修改系统参数 max_map_count,否则 Elasticsearch 无法启动:

在 /etc/sysctl.conf 文件中添加 vm.max_map_count=262144

echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
# 立即生效
sysctl -p

确认参数配置:

cat /etc/sysctl.conf

2.5 docker启动命令

es天生可以做集群的:

docker run -d \
  --name=myelasticsearch \
  --network elasticsearch-net \
  --restart=always \
  -p 9200:9200 \
  -p 9300:9300 \
  -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
  -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data \
  --privileged \
  -e "discovery.type=single-node" \
  -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
  elasticsearch:7.9.3

2.6 关闭es容器密码安全验证

进入es容器,编写elasticsearch.yml

es容器默认工作目录为:/usr/share/elasticsearch

docker exec -it myelasticsearch /bin/bash
cd config
vi elasticsearch.yml

添加以下内容:

xpack.security.enabled: false

2.7 重启es容器

docker restart myelasticsearch

2.8 测试安装成功

访问主机地址+端口号,前面配置Elasticsearch 的端口号为:9200

2.9 chrome浏览器插件elasticsearch-head

elasticsearch-head 项目提供了一个直观的界面,可以很方便地查看集群、分片、数据等等。elasticsearch-head最简单的安装方式是作为 chrome 浏览器插件进行安装。

下载地址:https://download.csdn.net/download/weixin_43025151/89952901

2.9 Elasticsearch安装IK中文分词器

2.9.1 下载 ik 分词器安装包

从 ik 分词器项目仓库中下载 ik 分词器安装包,下载的版本需要与 Elasticsearch 版本匹配。

elasticsearch-analysis-ik-7.9.3.zip下载地址:https://download.csdn.net/download/weixin_43025151/89952928

下载 elasticsearch-analysis-ik-7.9.3.zip 复制到 /root/ 目录下

#复制文件到es容器中
docker cp elasticsearch-analysis-ik-7.9.3.zip myelasticsearch:/root/

2.9.2 在 es容器中安装 ik 分词器

# 在 es容器中安装 ik 分词器
docker exec -it myelasticsearch elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 重启es 容器
docker restart myelasticsearch

2.9.3 查看安装结果

在浏览器中访问 http://xxxxxxx:9200/_cat/plugins

2.9.4 ik分词测试

ik分词器提供两种分词器: ik_max_word 和 ik_smart

  • ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;
  • ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

ik_max_word 分词测试

使用 head 执行下面测试:

http://xxxxxxx:9200/_analyze 路径提交 POST 请求,并在协议体中提交 Json 数据:

{
  "analyzer":"ik_max_word",
  "text":"中华人民共和国国歌"
}

ik_smart 分词测试

使用 head 执行下面测试:

http://xxxxxxx:9200/_analyze 路径提交 POST 请求,并在协议体中提交 Json 数据:

{
  "analyzer":"ik_smart",
  "text":"中华人民共和国国歌"
}

三、docker安装kibana

2.1 下载kibana 镜像

docker pull kibana:7.9.3

2.2 创建挂载点目录

mkdir -p -m 777 /usr/local/docker/kibana/config
mkdir -p -m 777 /usr/local/docker/kibana/data

2.3 docker启动命令

docker run -d \
--restart=always \
--name kibana \
--network elasticsearch-net \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://myelasticsearch:9200 \
kibana:7.9.3

kibana容器的默认工作目录为:/usr/share/kibana

2.4 kibana汉化

进入kibana容器

docker exec -it kibana /bin/bash
cd config
vi kibana.yml

添加下列信息:

i18n.locale: "zh-CN"

2.5 重启kibana容器

docker restart kibana

2.6 测试Kibana是否安装成功

访问主机地址+端口号,前面配置Kibana 的端口号为:5601

http://xxxxxxxx:5601

四、Docker安装Logstash

日志收集文件 /root/log.log

4.1 拉取镜像

docker pull logstash:7.9.3

4.2 创建宿主机的挂载目录

# 创建宿主机的挂载目录 并放开读写权限
mkdir -p -m 777 /usr/local/docker/logstash/pipeline
mkdir -p -m 777 /usr/local/docker/logstash/data
mkdir -p -m 777 /usr/local/docker/logstash/config

4.3 docker拷贝logstash容器挂载目录

首先简单启动一个logstash容器:

docker run -d --name=logstash logstash:7.9.3
##copylogstash容器工作目录 /usr/share/logstash 到宿主机
docker cp logstash:/usr/share/logstash /usr/local/docker

4.4 修改logstash挂载目录文件

/usr/local/docker/logstash/config/logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://myelasticsearch:9200" ]

/usr/local/docker/logstash/config/pipelines.yml

# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
#   https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
  path.config: "/usr/share/logstash/pipeline/logstash.conf"

/usr/local/docker/logstash/pipeline/logstash.conf

#从文件收集日志
input {
  file {
    path => "/root/log.log"
  }
}
#过滤日志
#输出日志到elasticsearch 通过rubydebug标准输出日志
output {
    stdout { codec => rubydebug }
}

4.5 创建容器

docker run -it --name logstash \
--restart=always --privileged \
-p 5044:5044 -p 9600:9600 \
--network elasticsearch-net \
-v /etc/localtime:/etc/localtime \
-v /usr/local/docker/logstash/config:/usr/share/logstash/config \
-v /usr/local/docker/logstash/pipeline:/usr/share/logstash/pipeline \
-v /usr/local/docker/logstash/data:/usr/share/logstash/data \
-d logstash:7.9.3

4.5 查看启动日志

docker logs logstash

发现启动失败,错误信息如下:

java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit

解决办法:

找到.lock文件并删除,然后重启logstash容器

find / -name .lock
rm -rf /usr/local/docker/logstash/data/.lock

logstash启动成功!!

五、Docker搭建Filebeat和使用方法

5.1下载Filebeat镜像

docker pull docker.elastic.co/beats/filebeat:7.9.3

5.2临时启动镜像

docker run -d --name=filebeat --network elasticsearch-net docker.elastic.co/beats/filebeat:7.9.3

5.3拷贝数据文件

docker cp filebeat:/usr/share/filebeat /usr/local/docker
chmod 777 -R /usr/local/docker/filebeat
chmod go-w /usr/local/docker/filebeat/filebeat.yml

5.4编辑配置文件

# 收集系统日志
filebeat.inputs:
- type: log
  enabled: true
  paths:
- /var/log/messages
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
output.elasticsearch:
  hosts: 'myelasticsearch:9200'
#  username: '${ELASTICSEARCH_USERNAME:}'
#  password: '${ELASTICSEARCH_PASSWORD:}'
  indices:
- index: "filebeat-%{+yyyy.MM.dd}"

5.5 重启filebeat容器

docker rm -f filebeat
docker run -d \
  --name=filebeat \
  --user=root \
  --restart=always \
  --network elasticsearch-net \
  -v /usr/local/docker/filebeat:/usr/share/filebeat \
  -v /usr/local/docker/logdemo:/var/log/messages \
  elastic/filebeat:7.9.3

等待30秒,查看日志是否有错误

docker logs -f filebeat

没有报错就算启动成功了。

5.6查看日志

访问elasticsearch head

六、使用1Panel查看容器

4个容器全部启动成功!!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号