Graylog 收集日志(Graylog-Sidecar)
本文仅介绍如何通过 Graylog-Sidecar 结合、Filebeat 收集 Nginx 日志,其前提需要提前安装好以下软件,其中Elasticsearch 版本请使用 6.8.x 版本,因为 Graylog3.2 暂不支持 Elasticseach7.x。下述软件的安装教程请参考我写的其安装文档,本文所有使用到的软件均由 Docker 安装,系统环境为 Linux x86-64 。
- graylog/graylog:3.2
- mongo:latest
- elasticsearch:6.8.6
- docker-compose
Graylog 配置
通过 Graylog Web 端创建一个 Configurations
编辑 Configurations,以下配置的是针对于 Graylog-Sidebar 容器的,并非是 Graylog 容器
实例项目APIJSON 日志目录:
Configuration
# Needed for Graylog
fields_under_root: true
fields.collector_node_id: ${sidecar.nodeName}
fields.gl2_source_collector: ${sidecar.nodeId}
filebeat.inputs:
- input_type: log
paths:
- /opt/apijson/log.log
type: log
output.logstash:
hosts: ["10.0.53.29:5044"]
path:
data: /var/lib/graylog-sidecar/collectors/filebeat/data
logs: /var/lib/graylog-sidecar/collectors/filebeat/log
创建一个,下面配置文件需要用到 Api Token
创建并复制新创建的Api Token
Graylog-Sidecar 安装
编写 docker-compose.yml 配置文件,GS_SERVER_URL 指的是 Graylog Api 接口地址,可以是域名、容器内的主机名、IP地址,只要能够访问到即可,此例中因为与 graylog web 同处于(docker-network)网络中,因此直接通过主机名访问。
version: "3.7"
services:
graylog-sidecar:
hostname: graylog-sidecar
image: markusgulden/graylog2-sidecar-docker:latest
container_name: graylog-sidecar
restart: unless-stopped
#network_mode: "host"
environment:
# graylog web 地址
- GS_SERVER_URL=http://graylog:9000/api/
# 节点唯一ID,自定义即可
- GS_NODE_ID="8148fcbc-9d30-4b2c-99d4-b1455b1f668a"
# 粘贴在graylog web上面创建的Api Token
- GS_SERVER_API_TOKEN=stegknp8qn35r64549bpienf1vro86tmpt9ks783v34182q8dl0
# 需要收集的日志文件,此处指的是容器的目录
- GS_LIST_LOG_FILES=/data/logs/nginx
volumes:
# 将宿主机中的日志目录映射到容器中
- /data/logs/nginx:/data/logs/nginx
networks:
- docker-network
# 创建一个桥接网络,如果多个容器均处于该网络中,则可以直接通过主机名称访问(hostname)
networks:
docker-network:
name: docker-network # 网络名称
driver: bridge
APIJSON示例服务器:
version: "3.7"
services:
graylog-sidecar:
hostname: graylog-sidecar
image: markusgulden/graylog2-sidecar-docker:latest
container_name: graylog-sidecar
restart: unless-stopped
#network_mode: "host"
environment:
# graylog web 地址
- GS_SERVER_URL=http://10.0.0.1:9000/api/
# 节点唯一ID,自定义即可
- GS_NODE_ID="graylog-sidecar-210826-01"
- GS_NODE_NAME="sidecar-apijson"
# 粘贴在graylog web上面创建的Api Token
- GS_SERVER_API_TOKEN=1rhkka3kf6qb21ljnmp20sfm5ug9fhsqcms7nrhmoq87nsc2fq7b
# 需要收集的日志文件,此处指的是容器的目录
- GS_LIST_LOG_FILES=/opt/apijson
volumes:
# 将宿主机中的日志目录映射到容器中
- /opt/apijson:/opt/apijson
networks:
- docker-network
# 创建一个桥接网络,如果多个容器均处于该网络中,则可以直接通过主机名称访问(hostname)
networks:
docker-network:
name: docker-network # 网络名称
driver: bridge
构建并启动容器即可
docker-compose up -d # 启动容器
docker logs -f graylog-graylog-sidecar # 查看容器启动日志是否有错误
搜索语法
如果想基于时间搜索条件的话,graylog本身提供相对时间、时间区间、时间表达式三种提交进行精确搜索,如下图所示
温馨提示
- graylog语法中的关键字是全部需要大写的
- graylog搜索记录中的列是区分大小写的
- graylog支持正则语法
- 加双引号代表精确搜索,否则代表模糊搜索
模糊搜索,在输入框随便输入点什么
com.antstar.app.* # 任意列包含该搜索条件开头均会搜索出来,其中 * 代表正则中的任意个字符
搜索指定 列 包含关键字,该列需要搜索记录包含该 列 ,否则搜索不出来任何结果
message:com.antstar.app.* # 搜索message列包含 com.antstar.app 开头的记录
AND 条件搜索,针对需要同时满足多个条件的搜索结果
tag:test AND level:7 # 搜索tag=test(自定义字段)并且level=7(debug级别)的记录
OR 条件搜索,针对仅需要满足其中一个条件的搜索结果
message:/home/* OR message:/api/* # 搜索message以/home或/api开头的记录
NOT 条件搜索,针对不满足条件的搜索
level:7 NOT message:/home/* # 搜索日志级别位debug级别并且message列不包含/home开头的记录