海量日志收集ELK实战(docker部署ELK)从日志中挖取宝贵数据
文章目录
- 一、准备工作
- 1.1 服务器配置要求
- 1.2 关闭防火墙
- 1.3 创建docker网络
- 二、docker安装elasticsearch
- 2.1 下载 Elastic Search 镜像
- 2.2 创建宿主机的挂载目录
- 2.3 设置宿主机max_map_count
- 2.5 docker启动命令
- 2.6 关闭es容器密码安全验证
- 2.7 重启es容器
- 2.8 测试安装成功
- 2.9 chrome浏览器插件elasticsearch-head
- 2.9 Elasticsearch安装IK中文分词器
- 2.9.1 下载 ik 分词器安装包
- 2.9.2 在 es容器中安装 ik 分词器
- 2.9.3 查看安装结果
- 2.9.4 ik分词测试
- 三、docker安装kibana
- 2.1 下载kibana 镜像
- 2.2 创建挂载点目录
- 2.3 docker启动命令
- 2.4 kibana汉化
- 2.5 重启kibana容器
- 2.6 测试Kibana是否安装成功
- 四、Docker安装Logstash
- 4.1 拉取镜像
- 4.2 创建宿主机的挂载目录
- 4.3 docker拷贝logstash容器挂载目录
- 4.4 修改logstash挂载目录文件
- 4.5 创建容器
- 4.5 查看启动日志
- 五、Docker搭建Filebeat和使用方法
- 5.1下载Filebeat镜像
- 5.2临时启动镜像
- 5.3拷贝数据文件
- 5.4编辑配置文件
- 5.5 重启filebeat容器
- 5.6查看日志
- 六、使用1Panel查看容器
一、准备工作
1.1 服务器配置要求
ELK安装服务器配置要求:至少2C4G以上的配置
已安装docker
如果不用dokcer安装,直接yum安装;请从以下网站下载对应的压缩包:
清华大学开源镜像站地址:
https://mirrors.tuna.tsinghua.edu.cn/
搜索elastic,elasticsearch使用7.x版本
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
http://xxxxxxx:9200
http://xxxxxxx:9200/_cat/nodes 查看es节点信息:
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个容器全部启动成功!!
只要你确信自己正确就去做。做了有人说不好,不做还是有人说不好,不要逃避批判。