这篇文章上次修改于 987 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
GrayLog是目前主流的日志管理软件之一,用户可使用该软件查看和分析实时日志,今天以Docker的方式部署一个GrayLog系统试试看。
安装环境
docker的安装方式不多赘述,之前的教程有Docker-Web虚拟化环境使用。
根据官方文档,GrayLog的必要环境为以下几点:
Java(>=8)
Elasticsearch(6.x或7.x)
MongoDB(4.0、4.2或4.4)
我们去DockerHub找对应版本并进行安装:
docker pull mongo:4.2
docker pull elasticsearch:6.8.19
docker pull graylog/graylog:4.1
启动环境
启动容器
docker run -idt --name mongo mongo:4.2
docker run -idt --name elasticsearch elasticsearch:6.8.19
docker run --link mongo --link elasticsearch -p 9000:9000 -p 12201:12201 -p 1514:1514 -p 5555:5555 -p 5140-5180:5140-5180 -p 5140-5180:5140-5180/udp -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" -e GRAYLOG_PASSWORD_SECRET=<接口token> -e GRAYLOG_ROOT_PASSWORD_SHA2=<admin密码> --name graylog -itd graylog/graylog:4.1
其中admin密码生成和token生成需要用到以下命令
# 生成token
pwgen -N 1 -s 96
# admin密码生成
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
调试
打开docker日志调试容器
docker logs -f -t --tail 100 graylog
访问http://IP:9000,输入用户名密码登录系统
对接Nginx
编辑Nginx配置文件
vim /etc/nginx/nginx.conf
# 在http中添加以下内容
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format graylog2_json escape=json '{ "timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": $body_bytes_sent, '
'"request_time": $request_time, '
'"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" }';
access_log syslog:server=127.0.0.1:5141,facility=local0,tag=nginx,severity=info graylog2_json;
用tcpdump查看是否有数据推送
tcpdump udp -n -vv port 5141 -i lo -X
打开GrayLog->System->Inputs
Select Input中选择Raw/Plaintext UDP,Launch new input,勾选Global,port为Nginx中配置的5141,填写完成后Save保存,Network IO出现数字是即为对接成功。
对接过程中可能会遇到recvBufferSize不匹配的情况,需要查看graylog日志进行调试,将Receive Buffer Size调整到合适的数字。
没有评论