docker部署ELK日志监控

发布时间丨2022-08-19 10:03:09作者丨zhaomeng浏览丨15


ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。

Elasticsearch 是一个搜索和分析引擎。
Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等存储库中。

Filebeat 获取每个服务器的日志并推送到es(小规模可以替代logstash)
Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。

第一步:filebeat安装到ubuntu20.4

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-amd64.deb
sudo dpkg -i filebeat-7.2.0-amd64.deb

配置input安装成功之后,配置文件的路经在/etc/filebeat/filebeat.yml,直接使用vim filebeat.yml .修改paths的值为日志路径

#=========================== Filebeat inputs =============================

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /mnt/data/wendalog/*.log
    #- c:\programdata\elasticsearch\logs\*

配置output.elasticsearch

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

运行filebeat:

sudo filebeat -e -c filebeat.yml

第二步:安装elasticsearch及es-head

docker安装ES

下载镜像:

docker pull elasticsearch:7.4.2

创建挂载数据目录卷并写入初始文件,及目录权限获取

mkdir -p /mnt/data/elasticsearch/config # 在文件夹下创建es的config文件夹,将docker中es的配置挂载在外部,当我们在linux虚拟机中修改es的配置文件时,就会同时修改docker中的es的配置
mkdir -p /mnt/data/elasticsearch/data #在文件夹下创建es的data文件夹
echo "http.host: 0.0.0.0" >> /mnt/data/elasticsearch/config/elasticsearch.yml # [http.host:0.0.0.0]允许任何远程机器访问es,并将其写入es的配置文件中

chmod -R 777 /mnt/data/elasticsearch/ # 保证权限问题

创建容器并运行

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /mnt/data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mnt/data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mnt/data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

# docker run --name elasticsearch 创建一个es容器并起一个名字;
# -p 9200:9200 将linux的9200端口映射到docker容器的9200端口,用来给es发送http请求
# -p 9300:9300 9300是es在分布式集群状态下节点之间的通信端口  \ 换行符
# -e 指定一个参数,当前es以单节点模式运行
# *注意,ES_JAVA_OPTS非常重要,指定开发时es运行时的最小和最大内存占用为512M和512M,否则就会占用全部可用内存
# -v 挂载命令,将虚拟机中的路径和docker中的路径进行关联
# -d 后台启动服务

安装成功之后

浏览器访问本地9200端口,出现如下的页面代表安装成功!

elasticsearch的head插件的可以观察es的服务器状态,也可以查询数据,可视化界面非常方便,那么如何在docker环境下安装elasticsearch的head插件呢,下面将详细介绍:

修改elasticsearch配置文件,添加如下代码:不加如下 的代码es-head不能跨域链接到es!

http.cors.enabled: true

http.cors.allow-origin: "*"

node.master: true

node.data: true

下载镜像

docker pull mobz/elasticsearch-head:5

创建容器

docker run -d --name es-head -p 9100:9100 mobz/elasticsearch-head:5

查看是否安装成功,出现下图就代表配置及安装完成,浏览器输入本地9100端口:

第三步:docker安装kibana,可视化查看es的数据

下载镜像这里需要保持kibana和es的版本一致否则kibana报错如下:我的es和kibana版本都是7.4.2


下载镜像:

sudo docker pull kibana:7.4.2

制作容器:

sudo docker run --name kibana --restart=always -e ELASTICSEARCH_HOSTS=自己的esip地址:9200 -p 5601:5601 -d kibana:7.4.2

进入容器修改配置文件es主机IP以及配置中文显示

kibana.yml配置文件如下:

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://自己的IP:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#设置kibana中文示
i18n.locale: "zh-CN"

访问浏览器的5601端口显示如下代表程序运行成功!

点击配置(左侧最后一个图标)kibana的es索引模式配置索引,获取es的日志文件信息

创建索引 ,索引和es中的一致,及kibana通过配置的索引获取es的数据

选择下一步配置完成之后进入discover配置

配置索引及筛选message中包含的ERROR字段的日志

kibana报错Data too large不能够正常运行,解决方法如下:

docker部署了kibana,正常运行,但是突然搜索的时候报错不能够链接到es的集群问题,思虑过后,查看docker的kibana的日志文件,docker logs id ,发现报如下错误: [circuit_breaking_exception] [parent] Data too large, data for [<http_request>,是因为数据量太大导致内存不足,因该是创建容器的时候设置了最大和最小的内存,因此删除容器重新制作容器,内错最大和最小都设置成512M, -e ES_JAVA_OPTS="-Xms512m -Xmx512m",发现成功可以打开kibana

推荐文章:scrapyd部署scrapy爬虫