技术标签: spring boot graylog
大纲
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文件中加入
<dependency>
<groupId>de.siegmar</groupId>
<artifactId>logback-gelf</artifactId>
<version>3.0.0</version>
</dependency>
这样就可以再logback配置文件中加入 GelfTcpAppender GelfUdpAppender
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 固定项目名称
此时项目部分就配置完成了
此时需要配置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端口 **
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 (推荐)
基础配置
配置匹配结果
配置自定义字段内容是一个关键,可以把日志中的一些数据发送出去!便于问题排查
自定义自定会以fields Map 作用json发送
可以使用以下字段作为 自定义字段数据(即graylog 当前search支持的显示字段即可)
选择已经配置好的通知即可 可以是邮件 可以是http
最后点击 Done完成配置
默认情况下是需要配置一个input 就可以自动与all-message streams绑定 做到开箱即用
但是我们有可能想对不同的项目,使用不同的streams 使用不同的索引管理日志,例如 nginx的日志保存3天 业务日志保存一个月
input streams index 的关系如下
注意数据
理论上只需要一个input即可
以下是为了展示多个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
文章浏览阅读1.6k次。点击单元格,选择“设置单元格格式”,然后选择“对齐”,在“文本控制”中勾选“自动换行”就可以了,当然你也可以选择水平对齐和垂直对齐的“居中”哦。..._电脑里面的文本控制自动换行在哪里
文章浏览阅读2.3k次。在虚拟机上成功安装Mac OX 10.6 系统之后,还有一些的需要的驱动。在安装vmare tool , 在启动界面,将setting->CD/DVD(IDE)选项中drawin.iso, 将上面的对话框connect 选中,之后会在系统的桌面上看到VMware Tool( Drawin) , 双击进去,直接双击Install VMware tools, 之后就可以的,重新启动,如下图所示_苹果笔记本装虚拟机后设备驱动也是虚拟吗
文章浏览阅读7.5k次。https://blog.csdn.net/lixiaoyaoboy/article/details/82667510_job for docker.service failed because a fatal signal was delivered to the co
文章浏览阅读2k次。swagger访问路径:localhost:服务端口号/服务名/swagger-ui.html。_swaager访问路径
文章浏览阅读3.8k次。目录杂七杂八语法<%= %>相同点:不同点:语法< form >(生成表单)杂七杂八加!表示全局变量不加表示局部变量<% 这个中间是java代码 %>语法<%= %>表达式语法:<%= %>作用:向浏览器输出数据用jsp的表达式和Java输出的比较相同点:都是向浏览器输出数据不同点:1.语法范畴不同out.println()属于Java语法范畴 <% %><%= %>表达式输_jsp页面表格设计
文章浏览阅读1.8k次,点赞20次,收藏22次。通过pm2的日志管理插件(pm2-logrotate)实现node-red的日志分割管理_pm2 日志
文章浏览阅读5.7k次,点赞9次,收藏7次。国内的期刊和毕业论文写作格式要求在参考文献中会议论文一律以论文集的形式著录,需注明论文集的出版地、出版者和出版年,但是国外论文的参考文献中一般不会标注论文集的出版地和出版社,他们只标注会议的举行时间和地点。为了满足毕业论文的格式要求,整理了常见计算机领域论文集的出版者及其出版地。出版者:出版地Internet Society: Rosten, VA, USASpringer: Berlin,GermanACM:New York, NYIEEE:Piscataway, NJUSENIX:Berk_论文中会议的出版者怎么写
文章浏览阅读1.7k次。Kudu同步数据到mysql实施方案简介目前kudu导出到mysql没有比较好的方案,临时借助spark-sql进行数据导出,处理逻辑是会把老的数据给删除再导入,已经完成了生产环境的上线。需要传入的参数程序参数 参数序号 字段含义 备注 1 同步的source表(含schema),必选 ..._sparksql 数据同步
文章浏览阅读1.1w次,点赞3次,收藏17次。这篇文章使用具体示例来介绍一下xargs命令-I参数的常见使用方法。_xargs -i
文章浏览阅读60次。1. 简单的景深影像处理 在上篇文章中,我们讨论了如何获取像素点的深度值以及如何根据深度值产生影像。在之前的例子中,我们过滤掉了阈值之外的点。这就是一种简单的图像处理,叫阈值处理。使用的阈值方法虽然有点粗糙,但是有用。更好的方法是利用机器学习来从每一帧影像数据中计算出阈值。Kinect深度值最大为4096mm,0值通常表示深度值不能确定,一般应该将0值过滤掉。微软建议在开发中使用1220...
文章浏览阅读823次,点赞19次,收藏18次。阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
文章浏览阅读506次。此文章向大家介绍一个python入门级爬虫,本人也是初次尝试,如有缺陷,欢迎指正。_odoo爬虫