大纲
Graylog 官网 https://www.graylog.org/
Graylog 教程 https://docs.graylog.org/docs/lookuptables
选择graylog的原因是:
部署 graylog 最简单的架构就是单机部署(足够满足医蟹这种体量的公司使用),复杂的也是部署集群模式
Graylog 的组件主要有3个
Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集)
MongoDb 用来存储关于 Graylog 的相关配置
Graylog 来提供 Web 界面和对外接口的(CPU 密集)
graylog的安装见《Graylog安装总结.md》此处假设已经将graylog安装完成
springboot集成graylog 主要是使用logback-gelf (搭建graylog的指定GELF 暴露的端口就是为此处使用的)
pom.xml文件中加入
de.siegmar
logback-gelf
3.0.0
这样就可以再logback配置文件中加入 GelfTcpAppender GelfUdpAppender
1 在application.properties 中指定logback的配置文件
logging.config=classpath:logback-logstash-graylog.xml
2 在 logback-logstash-graylog.xml 配置文件中加入GelfTcpAppender
192.168.0.211
12201
false
true
true
false
false
true
%m%nopex
#[%level] %d{yyyy-MM-dd HH:mm:ss.SSS } %thread %logger{35} - %msg %n
app_name:saas-task-server-AKA-TCP
my_field1:9991
也可以使用UDP通信的 GelfUdpAppender 见logback-logstash-graylog.xml 中的配置
区分项目过滤
使用app_name:saas-task_server 固定项目名称
此时项目部分就配置完成了
此时需要配置GrayLog 的input选择 新增TCP 或 UDP 的输入
如果创建UDP的输入同理
访问 GraylogController 中的mapping
http://127.0.0.1:8881/g/t3?b=2
GELF是一种日志格式,能避免传统意义上的 syslogs的一些问题,而我们引入的Maven依赖则是把日志格式化成GELF格式然后append到GrayLog上。
语法搜索: https://docs.graylog.org/docs/query-language (用chorme打开)
输入框中输入内容默认是搜索 message字段中的内容
这里主要是注意 空格表示OR ""框起来表示整体
** 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 关键字**
4 通配符
Use ? to replace a single character or * to replace zero or more characters:
创建邮件通知前需要先在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 = [email protected]
transport_email_auth_password = xxxxx
transport_email_subject_prefix = [graylog-mail]
transport_email_from_email = [email protected]
transport_email_use_tls = true
**注意选择邮件服务器和端口可能是587 465 具体看邮件服务器提供商 阿里云使用587端口 **
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": "",
"job_trigger_id": "",
"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 ",
"source": "000000000000000000000001",
"key_tuple": [
"testkey"
],
"key": "testkey",
"priority": 2,
"alert": true,
"fields": {
"field1": "value1",
"field2": "value2"
}
},
"backlog": []
}
直接使用inputstream
基于graylog发送的json 自定义bean (推荐)
基础配置
配置匹配结果
配置自定义字段内容是一个关键,可以把日志中的一些数据发送出去!便于问题排查
自定义自定会以fields Map 作用json发送
可以使用以下字段作为 自定义字段数据(即graylog 当前search支持的显示字段即可)
选择已经配置好的通知即可 可以是邮件 可以是http
最后点击 Done完成配置
默认情况下是需要配置一个input 就可以自动与all-message streams绑定 做到开箱即用
但是我们有可能想对不同的项目,使用不同的streams 使用不同的索引管理日志,例如 nginx的日志保存3天 业务日志保存一个月
注意数据
以下是为了展示多个input的使用
注意 如果是docker安装 要提前暴露端口
注意 一定要勾选 Remove matches from ‘All messages’ stream 这样数据不会到All messages中
创建完成后 点击管理规则
**规则的匹配方式有很多 **
例如 可以匹配某个字段是否是某个值
比如 app_name 是否是 saas-task-server-FFF 这样可以做项目间的区分
这里我们使用匹配 input
配置完规则后 可以测试下是否匹配成功
测试发现应该没有影响,只会打印连接失败,对正常业务没有影响
见配置《logback-logstash-graylog-tcp-file.xml》
支持gl2_remote_ip 打印远程ip