Graylog 收集日志(Content Pack)
graylog收集日志有好几种方式,此文主要介绍通过Content Pack收集Docker Nginx日志信息并展示在graylog控制台上
·
graylog收集日志有好几种方式,此文主要介绍通过Content Pack收集Docker Nginx日志信息并展示在graylog控制台上
安装Content Pack
- 首先在官网搜索一款叫做nginx-docker的Content Pack下载到本地,下载下来的文件是一个JSON文件,此处附上Content Pack地址:Graylog3 nginx + Docker content pack
- 接下来需要将下载的JSON文件上传到graylog
- 上传完成后下面列表就会出现nginx-docker内容包了,但是此时还不能使用,需要先进行安装
- 安装完成后会自动新增一个input udp的通道了,需要在安装graylog的时候配置这个端口与宿主机中的通讯,同时也要让防火墙放行端口,云服务器也需要放行才可以让外界访问
- 这些stream也是内容包内置的,主要用来筛选一些nginx日志用的,在这里还可以修改日志流发送到哪个索引中(elasticsearch索引名称)
- 最后需要验证外部是否能够正常连接这个UDP端口,可以使用nc命令验证,这个软件不是系统自带的,需要手动安装一下
sudo yum install nc # Centos
sudo apt install netcat # Ubuntu Deepin
nc -vuz IP或域名 端口号
以下是连接成功的示例
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 110.110.110.110:12201.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.
配置 nginx.conf
主要只需要修改nginx的日志格式为json格式就可以了,可以直接在nginx.conf文件中修改,也可以新建一个*.conf的文件放在conf.d目录下面,这里就直接写在nginx.conf文件中了
http {
log_format gelf_json escape=json '{ "timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"connection": "$connection", '
'"connection_requests": $connection_requests, '
'"pipe": "$pipe", '
'"body_bytes_sent": $body_bytes_sent, '
'"request_length": $request_length, '
'"request_time": $request_time, '
'"response_status": $status, '
'"request": "$request", '
'"request_method": "$request_method", '
'"host": "$host", '
'"upstream_cache_status": "$upstream_cache_status", '
'"upstream_addr": "$upstream_addr", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent", '
'"http_version": "$server_protocol", '
'"remote_user": "$remote_user", '
'"http_x_forwarded_proto": "$http_x_forwarded_proto", '
'"upstream_response_time": "$upstream_response_time", '
'"nginx_access": true }';
access_log /var/log/nginx/access.log gelf_json;
error_log /var/log/nginx/error.log warn;
# 省略其他配置...
# 主机
include /etc/nginx/conf.d/*.conf;
}
配置 Nginx compose文件
需要修改docker日志的驱动方式,graylog收集到的日志也就是在这里配置发送过去的
version: '3.7'
services:
nginx:
hostname: nginx
image: nginx:1.16.1
container_name: nginx
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./conf:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html
# - /data/logs/nginx:/var/log/nginx # 这个不能配置
ports:
- "80:80"
- "443:443"
logging:
driver: gelf
options:
gelf-address: "udp://172.18.0.6:12201" # 不能使用docker主机名,只能是域名或者是IP
tag: nginx # 指定标签,在graylog可以通过tag:nginx进行搜索
networks:
- docker-network
networks:
docker-network:
name: docker-network
driver: bridge
配置完成之后执行命令启动Nginx就可以了,然后就可以在graylog看到实时了
docker-compse up -d
温馨提示
构建nginx容器的时候不能将容器中的日志再映射到宿主机中了,否则graylog收集到的日志不能按照nginx.conf配置的json格式进行转换,所有的日志信息都将在存储在message字段中,不利于我们检索日志,后期也无法利用grafana软件进行请求分析,为了更清晰的说明,下面两张图就是映射了容器中的日志到宿主机和没有映射的效果图,因为之前在这上面踩了不少坑。
第一张图是没有进行日志映射的结果,可以看到nginx.conf配置的json格式,每一个字段都能被graylog解析了
第二张图是将容器中的日志映射到了宿主机中,可以看到nginx.conf配置的json都没有被解析到,所有的日志信息都被解析成一个json字符串存储在message字段了
参考文档
本文主要参考了该内容包作者写的示例文档,在这里也感谢作者的辛苦付出
更多推荐
所有评论(0)