ELK日志监控系统搭建docker版

目录

  • 日志来源
  • elk介绍
    • elasticsearch介绍
    • logstash介绍
    • kibana介绍
  • 部署
    • elasticsearch
      • 拉取镜像:`docker pull elasticsearch:7.17.9`
      • 修改配置⽂件:`/usr/share/elasticsearch/config/elasticsearch.yml`
      • 启动容器
      • 设置密码(123456)
      • 忘记密码重置密码
    • logstash
      • 拉取镜像:`docker pull logstash:7.17.9`
      • 修改配置
      • 启动容器
    • kibana
      • 拉取镜像
      • 修改配置⽂件kibana.yml
      • 启动容器
  • 运行

日志来源

  1. 使用docker部署nginx,并且提供简单的静态页面服务。
  2. 将nginx的配置,日志(error.log,access.log),页面统统挂载出来。

启动步骤如下:

  1. 先启动一个野nginx,然后把上述文件或目录docker cp出来,否则直接启动nginx会造成空目录覆盖镜像里面的文件导致无法启动nginx:

    docker run -d --name nginx_test
    
    docker exec -it nginx_test bash
    
  2. 确定文件,进入容器后,根据配置文件定位自己需要的目录:

    在这里插入图片描述

    # 配置目录(我嫌麻烦,一锅端)
    docker cp nginx_test:/etc/nginx /generalzy/elk/config
    # 页面目录
    docker cp nginx_test:/usr/share/nginx/html /generalzy/elk/html
    # 日志目录
    docker cp nginx_test:/var/log/nginx /genralzy/elk/logs
    
  3. 修拍配置文件后启动:

    docker run -p 30080:80 --name nginx --privileged=true \
    -v /generalzy/elk/html:/usr/share/nginx/html \
    -v /generalzy/elk/logs/access.log:/var/log/nginx/access.log \
    -v /generalzy/elk/logs/error.log:/var/log/nginx/error.log \
    -v /generalzy/elk/config:/etc/nginx \
    -d nginx
    
  4. 访问nginx
    ELK日志监控系统搭建docker版_第1张图片

elk介绍

⼀个⽇志系统应该包含以下⼏点:

(1) 收集[collect]:能够采集多种来源的⽇志数据
(2) 传输[transform]:能够稳定的把⽇志数据解析过滤并传输到存储系统
(3) 存储[store]:存储⽇志数据
(4) 分析[analyze]:⽀持 UI 分析
(5) 警告[warning]:能够提供错误报告,监控机制

ELK日志监控系统搭建docker版_第2张图片

ELK日志监控系统搭建docker版_第3张图片

elasticsearch介绍

elasticsearch是⼀个分布式、⾼扩展、⾼实时的搜索与数据分析引擎,作为存储系统是整个ELK架构的 核⼼。⽤于全⽂检索、结构化搜索、分析。

logstash介绍

logstash是开源的数据收集引擎。可以收集不同来源的数据,并将数据解析过滤发送到输出⽬标。

logstash提供了⼤量插件,可解析,丰富,转换和缓冲任何类型的数据。

管道(pipeline) 是logstash中独⽴运⾏的单元。每个管道都必须要包含输⼊(input)、输出(output)以及可选的过滤器(fileter)

ELK日志监控系统搭建docker版_第4张图片
1:inputs 输⼊ 【输⼊来源可以是file、kafka、beats等】
2:filters 过滤
3:outputs 输出 【输出⽬标可以是Stdout(控制台)、File、ES等】

logstash可以从多个输⼊源获取内容通过type进⾏区分 并可根据type向多数据源输出

kibana介绍

Kibana是⼀个开源的分析与可视化平台。

⽤kibana搜索、查看存放在Elasticsearch中的数据。

Kibana与Elasticsearch的交互⽅式是各种不同的图表、表格、地图等,直观的展示数据,从⽽达到⾼级 的数据分析与可视化的⽬的。

部署

部署前先创建新的局域⽹,防⽌容器IP频繁改动后需要修改配置⽂件

docker network create --subnet=172.18.0.0/16 elk_net
或
docker network create elk_net

elasticsearch

拉取镜像:docker pull elasticsearch:7.17.9

修改配置⽂件:/usr/share/elasticsearch/config/elasticsearch.yml

# es集群名称
cluster.name: "elastic"
# 监听
network.host: 0.0.0.0
# 跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
# 开启密码校验
xpack.security.enabled: true

启动容器

docker run -it --privileged=true -d -p 39200:9200 -p 39300:9300 --name es \
--net elk_net --privileged=true \
-v /generalzy/elk/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /generalzy/elk/es/data:/usr/share/elasticsearch/data \
-v /generalzy/elk/es/logs:/usr/share/elasticsearch/logs \
-e ES_JAVA_OPTS="-Xms128m -Xmx128m" -e "discovery.type=single-node" elasticsearch:7.17.9

Xms Xmx为最⼩最⼤堆内存,将其改为我们主机的物理内存的⼀半(50%-70%)即可,要设置成相同的值,以防⽌在运⾏时调整堆的⼤⼩。

设置密码(123456)

进⼊elasticsearch容器中初始化各个组件的密码

./bin/elasticsearch-setup-passwords interactive

ELK日志监控系统搭建docker版_第5张图片

忘记密码重置密码

修改elasticsearch.yml配置⽂件注释使⽤xpack安全校验配置,取消使⽤密码校验
ELK日志监控系统搭建docker版_第6张图片
重启容器查看所有索引curl -XGET "127.0.0.1:9200/_cat/indices" -H 'Content-Type: application/json'

删除security-7索引:curl -XDELETE 127.0.0.1:9200/.security-7

修改配置⽂件开启密码配置 后 重启,重复添加密码操作。

logstash

拉取镜像:docker pull logstash:7.17.9

修改配置

ELK日志监控系统搭建docker版_第7张图片
logstash.yml:

# 节点名称
node.name: "logstash001"
http.host: "0.0.0.0"
# 设置禁⽤X-Pack监视功能
xpack.monitoring.enabled: false

X-Pack是Elastic Stack的⼀个扩展插件,包含了安全控制、报警、监控、报表和画图功能。X- Pack能够⽅便地启⽤或禁⽤。

ELK日志监控系统搭建docker版_第8张图片
pipelines.yml:⽤于指定在⼀个logstash中运⾏多个管道的配置⽂件,在启动logstash时他会⾃动加载pipelines.yml中指定的path.config下的所有的管道配置⽂件conf合并成⼀个整体的配置⽂件。

将管道的具体的配置⽂件放置在config下,⽅便容器统⼀的挂载

# 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: pipeline001  # 管道id
  path.config: "/usr/share/logstash/config/*.conf"

pipeline管道配置: /usr/share/logstash/config/pipeline001.conf

#获取/usr/share/logs/*下的⽂件输出到es中
input {
	file{
		path => ['/usr/share/logs/*']
		type => "nginx-log"
	}
}

filter {
	#json{
		 # 将message作为解析json的字段
	 	 #source => "message"
	#}
}

output {
	if[type] == "nginx-log"{
		elasticsearch {
			hosts => [ "es:9200" ]
			index => "nginx-log-%{+YYYY-MM-dd}"
			user => "elastic"
			password => "123456"
		}
	}
}

nginx不做格式化 在logstash中是⽆法格式化成功的。它可以把json字符串处理成json数据(别忘了结尾分号

'{"nginx_timestamp":"$time_iso8601","clientip":"$remote_addr", '
                      ' "nginx_host":"$server_addr","host":"$http_host","request":"$request","url":"$request_uri",'
                      ' "upstreamhost":"$upstream_addr","status":"$status","body_bytes_sent":"$body_bytes_sent",'
                      ' "upstream_response_time":"$upstream_response_time",'
                      ' "xff":"$http_x_forwarded_for","referer":"$http_referer","http_user_agent":"$http_user_agent",'
                      ' "request_length":"$request_length","request_method":"$request_method"}'

ELK日志监控系统搭建docker版_第9张图片

启动容器

docker run -d -it --privileged=true --name=lh --net elk_net \
-p 35047:5047 -p 39600:9600 \
-v /generalzy/elk/logstash:/usr/share/logstash/config \
# nginx日志
-v /generalzy/elk/logs/:/usr/share/logs/ \
logstash:7.17.9

在这里插入图片描述

kibana

拉取镜像

docker pull kibana:7.17.9

修改配置⽂件kibana.yml

server.name: kibana
server.host: "0.0.0.0"
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.hosts: [ "http://es:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
elasticsearch.requestTimeout: 50000
i18n.locale: "zh-CN"	#中⽂ui界⾯
server.publicBaseUrl: "http://0.0.0.0:5601"

启动容器

docker run -d --privileged=true --name kb \
-p 35601:5601 --net elk_net \
-v /generalzy/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
kibana:7.17.9

运行

打开界⾯后 先在索引管理中找到logstash输出到es中的数据产⽣的索引,随后去“索引模式”模块中去定义⼀个索引模式,kibana索引模式要与es中的索引相匹配才可以在kibana中实现可视化管理。

  1. 先根据索引写一个正则,由于收集的日志前缀都是nginx,可以定义nginx索引模式

    ELK日志监控系统搭建docker版_第10张图片

  2. 查看日志:
    ELK日志监控系统搭建docker版_第11张图片
    ELK日志监控系统搭建docker版_第12张图片

你可能感兴趣的:(elasticsearch,elk,docker,容器)