赞
踩
已经部署docker
docker可正常拉取镜像
因为实际使用dicker部署的时候需要映射宿主机的目录到容器内,所以需要在宿主机内准备相关文件,并修改读写权限,学习时候,可以直接使用下面的命令直接赋权,生产时,另做考虑
chmod 777 /root/elk_workspace
chmod 777 /var/log/nginx
nginx目录在拉起logstash的时候,需要映射到容器内部,即logstash需要读写这个目录,所以要将这个目录的权限修改一下
即修改配置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
通常我们在实际生产的时候,会有多个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
这个文件的命名要和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,即使用-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输入
实际使用的命令如下,因为在学习中我们只有一个节点,所以需要设置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
docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.14.0
参考笔者的其他博客 "Nginx工作日志构造"
参考其他博主的博客 ELK——监控nginx日志(alert报警)_逝去的蛮霸的博客-CSDN博客_nginx告警规则
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。