Graylog 使用篇

中文文档

中文文档地址

收集日志

根据官方文档介绍,通过 FilebeatWinlogbeatNXLog 采集上来的日志,可以通过 Graylog Sidecar 进行配置管理,但不限于这些,例如 sysmonauditd 或者 packetbeat 也是可以的。

Graylog Sidecar 文档地址:请点这里

Springboot 等 Java项目 整合 graylog

像常用的 Java项目 一般都是用的 log4jlogback 等日志工具。因为 springboot 默认的日志工具是 logback,所以这里就以此为例。

将 Java项目 的日志通过 logback 输入到 graylog 中:

  1. 社区 上找到对应的依赖包(有使用介绍),并在项目中添加依赖
  2. 根据依赖的介绍配置一下日志配置文件
  3. graylog 的 web管理页面 添加一个 Inputs => GELF UDP

本章以 https://github.com/osiegmar/logback-gelf 这一个插件为例。

1.build.gradle

1
implementation 'de.siegmar:logback-gelf:2.0.0'

2.logback.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<configuration>
<!-- 配置日志输出到Graylog服务 -->
<!-- github: https://github.com/osiegmar/logback-gelf -->
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
<!-- 配置Graylog服务的地址 -->
<graylogHost>192.168.1.122</graylogHost>
<!-- UDP Input端口 -->
<graylogPort>12201</graylogPort>
<!-- 最大GELF数据块大小(单位:字节),508为建议最小值,最大值为65467 -->
<maxChunkSize>508</maxChunkSize>
<!-- 是否使用压缩,默认 true -->
<useCompression>true</useCompression>

<encoder class="de.siegmar.logbackgelf.GelfEncoder">
<!-- 原始主机名 - 如果没有指定将自动检测 -->
<originHost></originHost>
<!-- 是否发送原生的日志信息,默认 false -->
<includeRawMessage>false</includeRawMessage>
<!-- 是否发送回送标记,默认 true -->
<includeMarker>true</includeMarker>
<!-- 是否发送 mdc 键/值,默认 true -->
<includeMdcData>true</includeMdcData>
<!-- 是否发送调用方数据(源文件、方法、类名和行),默认 false -->
<includeCallerData>false</includeCallerData>
<!-- If true, root cause exception of the exception passed with the log message will be exposed in the root_cause_class_name and root_cause_message fields. Default: false. -->
<includeRootCauseData>false</includeRootCauseData>
<!-- 是否发送日志级别的名称,否则默认以数字代表日志级别,默认 false -->
<includeLevelName>true</includeLevelName>
<!-- 短消息格式。默认 "%m%nopex" -->
<shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>%m%nopex</pattern>
</shortPatternLayout>
<!-- 完整的消息格式(Stacktrace)。默认 "%m%n" -->
<fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d - [%thread] %-5level %logger{35} - %msg%n</pattern>
</fullPatternLayout>
<!-- 要发送到 graylog 的其他静态字段 -->
<!-- 配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段 -->
<staticField>_app_name:demo-log</staticField>
<staticField>_os_arch:${os.arch}</staticField>
<staticField>_os_name:${os.name}</staticField>
<staticField>_os_version:${os.version}</staticField>
</encoder>
</appender>

<root level="info">
<appender-ref ref="GELF"/>
</root>

</configuration>

3.增加一个 Inputs

点击 System -> Inputs

Graylog-to-Inputs

选择 GELF UDP,点击 Launch new Input,根据后图进行配置

图例

成功会如下图多一条记录,点击导航条的 Search 查看日志

图例

然后回到 Search 页正常查看即可。

常用的搜索语法如下:

  • 模糊查询:直接输入要查询的内容,例如:orderid
  • 精确查询:要查询的内容加上引号,例如:"orderid: 11"
  • 指定字段查询: message: http 或 message: "http"
  • 多字段查询:message: (base-service base-web)
  • 多条件查询:message: http AND level_name: ERROR OR source:192.168.0.4
  • 正则匹配查询:app_name:order-service AND orderid:12?4*

注意:以上示例中涉及的符号全部是英文符号,且字母不区分大小写

关于搜索语法的官方文档地址如下:

http://docs.graylog.org/en/3.3/pages/queries.html

python 将日志打印到 graylog

参考于 https://github.com/severb/graypy

安装

1
2
3
4
# pip 装法
pip install graypy
# easy_install 装法
easy_install graypy

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 引包
import logging
import graypy

# 定义日志
logger = logging.getLogger('graylog-log')
logger.setLevel(logging.INFO)
# 设置 graylog 的ip、端口
log_handler = graypy.GELFUDPHandler('192.168.1.122', 12201)
logger.addHandler(log_handler)

###### 日志输出
# 如果不需要增加自定义参数
logger.info('this is test message')

# 如果需要增加自定义参数
log = logging.LoggerAdapter(mlogger, {'app_name': 'app-a'})
log.info('this is test message')

采集系统日志 syslog

通过 rsyslog 来输入到 graylog

Linux 服务器配置

增加一个额外的 rsyslog 配置,并设置转发 sysloggraylog

1
2
3
4
5
6
7
vim /etc/rsyslog.d/greylog.conf

# 增加以下内容
## *.* 代表linux中所有模块所有级别的日志
## @代表使用udp协议,@@代表使用tcp协议
## 192.168.1.122:1514 graylog主机的IP和收集端口
*.* @192.168.1.122:1514;RSYSLOG_SyslogProtocol23Format

Graylog web 配置

Graylog web 管理页面增加一个 Inputs,类型为 Syslog UDP,端口设置为 1514( 很多发行版的 linux 不支持非 root 用户使用 1024 以下的端口( 特殊端口 ) )

图例

测试

如果系统没啥日志的话,可以通过 logger 发一个测试的

1
logger -p mail.info "hello!"

Search 页多了一条记录则为正常。

Filebeat 收集文件日志

Sidecar 安装配置

Graylog3 使用 sidecar代理程序 来收集 linuxwindows 主机上的日志,使用 rpm 的方式安装。

下载地址为:https://github.com/Graylog2/collector-sidecar/releases/

当前我下载的是 graylog-sidecar-1.0.2

1
2
3
4
5
# rpm 命令
安装: rpm -ivh xxx.rpm
卸载: rpm -e xxx.rpm
查看: rpm -qa
强制安装: rpm -ivh xxx.rpm **\--force --nodeps**

安装完后,先创建一个 token,用于配置文件的。

token 的创建在 graylog web 页面里面创建,具体为 System -> Sidecars -> Create or reuse a token for the graylog-sidecar user,然后填信息保存,最后将生成的 token 复制粘贴到配置文件中即可。

复制后,修改其配置文件: /etc/graylog/sidecar/sidecar.yml

根据 官方文档相关介绍,使用起来就只需要更改 server_url( graylog-api 地址 ) 和 server_api_token( 需要的 token,上一步创建的 )。

然后将这个加到服务里,启动并设置开机启动即可。

1
2
3
4
5
6
# 添加到服务
graylog-sidecar -service install
# 启动
systemctl start graylog-sidecar
# 设置开机启动
systemctl enable graylog-sidecar

通过命令 systemctl status graylog-sidecar 查看 sidecar 的启动情况

FileBeat 安装配置

graylog-sidecar 需要第三方软件作为收集器,有 filebeatnxlog,这里使用 filebeat,其下载页面是: 下载页面,也是下载 rpm 包,下载链接显示为:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.0-x86\_64.rpm,一般 elasticsearch 是什么版本,例如我用的是 6.8.9,就直接将 7.7.0 更改到对应的版本即可。

老规矩,修改配置文件:/etc/filebeat/filebeat.yml

一个是将要收集的日志文件换上,然后更改一下 elasticsearch 的地址。

启动设置开机自启

1
2
3
4
# 启动
systemctl start filebeat
# 设置开机启动
systemctl enable filebeat

查看 filebeat 的启动情况

1
systemctl status filebeat

Filebeat 多行配置

参考 https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html

Filebeat 增加自定义字段,配置文件往下拉拉,有一个 fields 的参数,根据实例添加即可,记得将 fields_under_root 设置成 true( 可以理解为将添加的字段放到根路径上,不设置则会是的是 fields.xxx )

Graylog 设置

到此, sidecarfilebeat 的安装就结束了,这俩是安装到需要采集日志的机器上的,都安装成功后,在 graylog web 上配置一下,就可以在 graylog web 上筛选查看了。

  • 首先,增加一个 Sidecars Configuration
  • 然后与 Collectors 进行关联
  • 然后增加一个 BeatsInputs

:默认情况下,这么收集的日志键都会多一个 filebeat_ 的前缀,如果不要这个的话,创建 Inputs 时,在保存按钮上面,有一个 Do not add Beats type as prefix,打勾即可。

  • 结束,去 Search 也进行查看即可。

若需要将日志进行匹配获得某些字段信息,例如将日志中的时间提取出来,可以使用 Graylog 带有的 Extractors

https://docs.graylog.org/en/3.3/pages/extractors.html

自制仪表盘

Search 页增加

当需要知道一段时间内出现 ERROR 级别日志的频率,来源于哪些项目,整个 Graylog 中现共有多少日志数等需求时,可以通过在 Search 页中新增一个 Aggregation

然后在生成的小窗口中点击 Edit 按钮,配置需要的东西

类型:

  • Area Chart 面积图
  • Bar Chart 条形图
  • Data Table 数据表
  • Heatmap 热图
  • Line Chart 折线图
  • Pie Chart 饼形图
  • Scatter Plot 散点图
  • Single Number 只显示一个数字
  • World Map 世界地图

指标:

  • count() 计数
  • avg(…) 平均值
  • card(…) 集合数量
  • count(…) 计数
  • max(…) 最大值
  • min(…) 最小值
  • stddev(…) 标准差
  • sum(…) 求和
  • sumofsquares(…) 面积总和
  • variance(…) 方差
  • percentile(…) 分位数

仪表盘

如果我想同时看各个不同时间的指标,很明显就没法实现。

Graylog 提供了 Dashboards 自制。通过导航栏的 Dashboards 进入

在打开的窗口中先点 Save as 保存一下

然后跟 Search 页一样添加一个 Aggregation,会如图一样多了筛选条件的选项

根据需要自行配置,然后保存即可。

而后打开这个仪表盘,大致跟 Search 页的是类同的,不过时间筛选那里多了一个 No Override,默认是这个,表示不做条件筛选。

流和索引

像前面所提,这个日志应用是提供给多个服务共同使用的,所以对各个服务间的日志正常是需要区分归类,例如测试环境、生产环境等等,其保存的时间长度也可以通过这个进行不一样的划分。

elasticsearch 是以索引来存储数据的,启动 graylog 后,会自动生产如下图的一个默认索引,可以在其中配置数据存储限制(通过时间、大小、数量来进行存储限制)

索引创建后,需要创建流来将收到的日志进行区分( 将匹配到的日志存入新的索引 )

附一个按时间( Index Time )轮转的例子

Graylog最佳实践 - 知乎

过程中看到的写的好的相关文章

CentOS7 部署 Graylog3 套件

https://www.jianshu.com/p/734d2eb5f6a8