graylog使用总结.md
大纲
- 概念
- springboot集成graylog
- gelf详细配置说明
- graylog搜索语法
- graylog控制台使用
- 问题总结
概念
Graylog 官网 https://www.graylog.org/
Graylog 教程 https://docs.graylog.org/docs/lookuptables
选择graylog的原因是:
- 1 轻量化,springboot可以直接接入到graylog不需要其他的配置
- 2 简单,单机版可以满足大部分非高并发行公司的业务日志查询
部署 graylog 最简单的架构就是单机部署(足够满足医蟹这种体量的公司使用),复杂的也是部署集群模式
Graylog 的组件主要有3个
- Elasticsearch
- MongoDb
- Graylog
Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集)
MongoDb 用来存储关于 Graylog 的相关配置
Graylog 来提供 Web 界面和对外接口的(CPU 密集)
graylog的安装见《Graylog安装总结.md》此处假设已经将graylog安装完成
springboot集成graylog
基础概念
springboot集成graylog 主要是使用logback-gelf (搭建graylog的指定GELF 暴露的端口就是为此处使用的)
step1 项目引入logback-gelf
pom.xml文件中加入
<dependency>
<groupId>de.siegmar</groupId>
<artifactId>logback-gelf</artifactId>
<version>3.0.0</version>
</dependency>
这样就可以再logback配置文件中加入 GelfTcpAppender GelfUdpAppender
step2 项目logback文件中加入 Gelf Appender
1 在application.properties 中指定logback的配置文件
logging.config=classpath:logback-logstash-graylog.xml
2 在 logback-logstash-graylog.xml 配置文件中加入GelfTcpAppender
<appender name="GELF_TCP" class="de.siegmar.logbackgelf.GelfTcpAppender">
<!-- Graylog服务的地址 -->
<graylogHost>192.168.0.211</graylogHost>
<!-- TCP Input端口 -->
<graylogPort>12201</graylogPort>
<encoder class="de.siegmar.logbackgelf.GelfEncoder">
<!-- 是否发送原生的日志信息 -->
<includeRawMessage>false</includeRawMessage>
<includeMarker>true</includeMarker>
<includeMdcData>true</includeMdcData>
<includeCallerData>false</includeCallerData>
<includeRootCauseData>false</includeRootCauseData>
<!-- 是否发送日志级别的名称,否则默认以数字代表日志级别 -->
<includeLevelName>true</includeLevelName>
<shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>%m%nopex</pattern>
</shortPatternLayout>
<fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>#[%level] %d{yyyy-MM-dd HH:mm:ss.SSS } %thread %logger{35} - %msg %n</pattern>
</fullPatternLayout>
<!--
配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段
-->
<staticField>app_name:saas-task-server-AKA-TCP</staticField>
<staticField>my_field1:9991</staticField>
</encoder>
</appender>
也可以使用UDP通信的 GelfUdpAppender 见logback-logstash-graylog.xml 中的配置
区分项目过滤
使用app_name:saas-task_server 固定项目名称
此时项目部分就配置完成了
step3 配置GrayLog
此时需要配置GrayLog 的input选择 新增TCP 或 UDP 的输入
如果创建UDP的输入同理
step4 测试日志收集
访问 GraylogController 中的mapping
http://127.0.0.1:8881/g/t3?b=2
gelf详细配置说明
GELF是一种日志格式,能避免传统意义上的 syslogs的一些问题,而我们引入的Maven依赖则是把日志格式化成GELF格式然后append到GrayLog上。
graylog 搜索语法
语法搜索: https://docs.graylog.org/docs/query-language (用chorme打开)
输入框中输入内容默认是搜索 message字段中的内容
这里主要是注意 空格表示OR ""框起来表示整体
- 输入一个单词MM 表示message内容中有MM
- 输入两个单词MM KFC 表示message内容中有MM 或者 KFC
- 输入"MM KFC" 表示精确匹配
** 1 字段查询**
字段名称:内容
例如
app_name:saas-task-server-FFFJJ 精确匹配app_name字段内容为saas-task-server-FFFJJ
app_name:med* 使用正则匹配pp_name字段内容为med开头的
app_name:(med* saas-task*) 可以配置app_name字段内容为多个的
** 2 范围查询**
http_response_code:[500 TO 504]
http_response_code:{400 TO 404}
bytes:{0 TO 64]
http_response_code:[0 TO 64}
或者这是大于小于号
http_response_code:>400
http_response_code:<400
http_response_code:>=400
http_response_code:<=400
http_response_code:(>=400 AND <500)
** 3 关键字**
- AND
- OR
- NOT
注意需要大写
4 通配符
Use ? to replace a single character or * to replace zero or more characters:
graylog控制台使用
查询控制面板的使用
报警与通知
创建email通知
graylog配置支持
创建邮件通知前需要先在graylog配置中开启并配置邮件发送相关配置 (见《Graylog安装总结.md》)
transport_email_enabled = true
transport_email_hostname = smtp.mxhichina.com
transport_email_port = 587
transport_email_use_auth = true
transport_email_auth_username = qq@qq.com
transport_email_auth_password = xxxxx
transport_email_subject_prefix = [graylog-mail]
transport_email_from_email = qq@qq.com
transport_email_use_tls = true
**注意选择邮件服务器和端口可能是587 465 具体看邮件服务器提供商 阿里云使用587端口 **
选择创建通知
配置邮件
创建http通知
配置http通知
http 通知可以警告消息发送给自己的服务器
消息通知的数据格式
graylog会发送一个http post json请求到对应的url地址,json数据内容如下
{
"event_definition_id": "this-is-a-test-notification",
"event_definition_type": "test-dummy-v1",
"event_definition_title": "Event Definition Test Title",
"event_definition_description": "Event Definition Test Description",
"job_definition_id": "<unknown>",
"job_trigger_id": "<unknown>",
"event": {
"id": "NotificationTestId",
"event_definition_type": "notification-test-v1",
"event_definition_id": "EventDefinitionTestId",
"origin_context": "urn:graylog:message:es:testIndex_42:b5e53442-12bb-4374-90ed-0deadbeefbaz",
"timestamp": "2020-05-20T11:35:11.117Z",
"timestamp_processing": "2020-05-20T11:35:11.117Z",
"timerange_start": null,
"timerange_end": null,
"streams": [
"000000000000000000000002"
],
"source_streams": [],
"message": "Notification test message triggered from user <admin>",
"source": "000000000000000000000001",
"key_tuple": [
"testkey"
],
"key": "testkey",
"priority": 2,
"alert": true,
"fields": {
"field1": "value1",
"field2": "value2"
}
},
"backlog": []
}
服务器端接收数据的方式
- 直接使用inputstream
- 基于graylog发送的json 自定义bean
直接使用inputstream
基于graylog发送的json 自定义bean (推荐)
创建报警
创建报警配置
基础配置
配置匹配条件与频率
配置匹配结果
- Filter has results : 匹配一个就报警
- Aggregation of results reaches a threshold: 满足聚合后的量才报警(例如出现几次异常才报警)
配置自定字段
配置自定义字段内容是一个关键,可以把日志中的一些数据发送出去!便于问题排查
自定义自定会以fields Map 作用json发送
可以使用以下字段作为 自定义字段数据(即graylog 当前search支持的显示字段即可)
配置通知方式
选择已经配置好的通知即可 可以是邮件 可以是http
最后点击 Done完成配置
输入input 数据流streams 索引index
默认情况下是需要配置一个input 就可以自动与all-message streams绑定 做到开箱即用
但是我们有可能想对不同的项目,使用不同的streams 使用不同的索引管理日志,例如 nginx的日志保存3天 业务日志保存一个月
input streams index 的关系如下
注意数据
配置一个自定义的streams 做日志管理
Step1 创建一个 input
理论上只需要一个input即可
以下是为了展示多个input的使用
注意 如果是docker安装 要提前暴露端口
Step2 创建一个 index 索引
Step3 创建一个 streams 数据流
注意 一定要勾选 Remove matches from ‘All messages’ stream 这样数据不会到All messages中
创建完成后 点击管理规则
**规则的匹配方式有很多 **
例如 可以匹配某个字段是否是某个值
比如 app_name 是否是 saas-task-server-FFF 这样可以做项目间的区分
这里我们使用匹配 input
配置完规则后 可以测试下是否匹配成功
Step4 search面板中找到自己创建的stream
问题总结
如果Graylog宕机后 会影响程序么
测试发现应该没有影响,只会打印连接失败,对正常业务没有影响
Graylog与文件配置使用方式
见配置《logback-logstash-graylog-tcp-file.xml》
打印ip
支持gl2_remote_ip 打印远程ip