当前位置: 首页 > article >正文

海量日志收集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个容器全部启动成功!!

在这里插入图片描述


只要你确信自己正确就去做。做了有人说不好,不做还是有人说不好,不要逃避批判。



http://www.kler.cn/a/388503.html

相关文章:

  • IDEA遇到EasyConnect中的网络资源无法访问的问题
  • 如何将CSDN博客下载为PDF文件
  • 5G模组AT命令脚本-关闭模组的IP过滤功能
  • 解决Ubuntu在VMware关机时,老是一个光标在那里闪动几分钟,才能关机的问题
  • 在 Vue 3 中获取图片元素的宽高:原始尺寸与缩放后尺寸的处理方法
  • 从零开始的使用SpringBoot和WebSocket打造实时共享文本应用
  • 云防护单节点2T抗攻击能力意味着什么?
  • 《深入浅出HTTPS​​​​​​​》读书笔记(7):安全的密码学Hash算法
  • 全局注册和局部注册
  • JSON-RPC-CXX深度解析:C++中的远程调用利器
  • 华为OD七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD
  • [安洵杯 2019]easy_web 详细题解
  • LeetCode【0004】寻找两个正序数组的中位数
  • 线程与进程的区别(面试)
  • GNN系统学习:简单图论、环境配置、PyG中图与图数据集的表示和使用
  • 多媒体信息检索
  • 证书学习(六)TSA 时间戳服务器原理 + 7 个免费时间戳服务器地址
  • Redis如何保证数据不丢失(可靠性)
  • JS的DOM操作 (节点获取,节点属性修改,节点创建与插入,CSS样式的修改)
  • 【Rust设计模式之建造者模式】
  • Linux-c TCP服务模型
  • Springboot 的Servlet Web 应用、响应式 Web 应用(Reactive)以及非 Web 应用(None)的特点和适用场景
  • 【python】OpenCV—WaterShed Algorithm(2)
  • Knowledge Graph-Enhanced Large Language Models via Path Selection
  • 海康Android面试题及参考答案
  • PSINS工具箱,MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式为EKF)