当前位置:   article > 正文

Docker搭建ELK监控Nginx日志

elk监控nginx日志

Docker搭建ELK监控Nginx日志

前置条件

  1. 已经部署docker

  2. docker可正常拉取镜像

准备相关文件

因为实际使用dicker部署的时候需要映射宿主机的目录到容器内,所以需要在宿主机内准备相关文件,并修改读写权限,学习时候,可以直接使用下面的命令直接赋权,生产时,另做考虑

chmod 777 /root/elk_workspace

chmod 777 /var/log/nginx

nginx目录在拉起logstash的时候,需要映射到容器内部,即logstash需要读写这个目录,所以要将这个目录的权限修改一下

修改logstash.yml文件

即修改配置logstash工作时候的一些配置

命令 vim /root/elk_workspace/config/logstash.yml

具体内容为

node.name: logstash-203
# 日志文件目录配置
path.logs: /usr/share/logstash/logs
# 验证配置文件及存在性
config.test_and_exit: false
# 配置文件改变时是否自动加载
config.reload.automatic: false
# 重新加载配置文件间隔
config.reload.interval: 60s
# debug模式 开启后会打印解析后的配置文件 包括密码等信息 慎用
# 需要同时配置日志等级为debug
config.debug: true
log.level: debug
# The bind address for the metrics REST endpoint.
http.host: 0.0.0.0

新建并修改pipelines.yml文件

通常我们在实际生产的时候,会有多个pipline,而这多个pipline,可以在pipelines.yml文件中定义,并且这个文件名是固定的,在部署logstash容器之后,这个文件会映射到容器内部

命令 vim /root/elk_workspace/logstash/config/pipelines.yml

- pipeline.id: pipline_1
  path.config: /usr/share/logstash/pipeline/pipline_1.conf

新建并修改pipline文件

这个文件的命名要和pipelines.yml中的严格对应

命令 vim /root/elk_workspace/logstash/pipeline/pipline_1.conf

具体内容

input{
        file{
                path => "/usr/share/logstash/data/access.log"
                type => "nginx-log"
                start_position => "beginning"
        }
}
filter{
        grok{
                match => {"message" => '%{IPORHOST:client_ip} (%{USER:ident}|- ) (%{USER:auth}|-) \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} (%{NOTSPACE:request}|-)(?: HTTP/%{NUMBER:http_version})?|-)" %{NUMBER:status} (?:%{NUMBER:bytes}|-) "(?:%{URI:referrer}|-)" "%{GREEDYDATA:agent}"'}
        }
}
output{
        elasticsearch{
                hosts => "47.97.161.134"
                index => "nginx_log-%{+YYYY.MM.dd}"
        }
}
​

imput->file->path表示从这个路径读取文件

filter->grok->match表示对输入的文件做正则匹配

output-elasticsearch->hosts 表示elasticsearch的主机IP,这里不能填127.0.0.1,因为elasticsearch和logstash在不同的容器中,已经做隔离

部署logstash

命令

以交互的方式部署logstash,即使用-it参数,而非-d参数

docker run -it --name=my_logstas logstash:7.14.0 -e " input { stdin { } } output { stdout { } } "

持久化部署logstash,即使用-d参数,而非-it参数

docker run -d --name=my_logstas logstash:7.14.0

实际的部署命令

docker run --name logstash \
-v /root/elk_workspace/logstash/config:/usr/share/logstash/config \
-v /var/log/nginx:/usr/share/logstash/data \
-v /root/elk_workspace/logstash/pipeline:/usr/share/logstash/pipeline \
-d logstash:7.14.0

解释

表示挂载该目录作为配置目录,下面会有一个yml文件作为配置文件 表示挂载该目录作为数据目录,估计logstash将会采集这个目录下的文件,具体的过滤规则应该是参考pipline文件 表示挂载该目录作为pipline目录,作为logstash的pipline输入

部署elasticsearch

命令

实际使用的命令如下,因为在学习中我们只有一个节点,所以需要设置discovery.type=single-node,即单节点的意思

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" elasticsearch:7.14.0

部署kibana

命令

docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.14.0

其他

Nginx日志环境的准备

参考笔者的其他博客 "Nginx工作日志构造"

如何创建索引

参考其他博主的博客 ELK——监控nginx日志(alert报警)_逝去的蛮霸的博客-CSDN博客_nginx告警规则

本博客主要参考参考如下

参考博客: ELK——监控nginx日志(alert报警)_逝去的蛮霸的博客-CSDN博客_nginx告警规则

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号