GrayLog简介
GrayLog是一个轻量型的分布式日志管理平台,一个开源的日志聚合、分析、审计、展示和预警工具。在功能上来说,和 ELK类似,但又比 ELK要简单轻量许多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多公司的青睐。
GrayLog包含 Elasticsearch
、MongoDb
和 Graylog
三个模块。其中,Elasticsearch用来持久化存储和检索日志文件数据,MongoDb 用来存储关于 Graylog的相关配置,而 Graylog用来提供 Web 界面和对外接口。
- 单机部署
-
集群部署
GrayLog功能分析
简单来讲,Input
表示日志数据的来源,对不同来源的日志可以通过 Extractors
来进行日志的字段转换。然后,通过不同的标签类型分组成不用的 Stream
,并将这些日志数据存储到指定的 Elastic Index
库中进行持久化保存。
组件名称 | 功能介绍 | 主要特点 |
---|---|---|
Dashboards | 数据面板固定展示 | 主要是用来保存特定搜索条件的数据面板 |
Searching | 日志信息条件搜索 | 关键字搜索、时间搜索、搜索保存、创建面板、分组查询、结果导出、查询高亮显示、自定义时间 |
Alert | 设置告警提示方式 | 支持邮件告警、HTTP 回调和自定义脚本触发 |
Inputs | 日志数据抓取接收 | 部署 Sidercar 主动抓取或使用其他服务被动上报 |
Extractors | 日志数据格式转换 | json 解析、kv 解析、时间戳解析、正则解析 |
Streams | 日志信息分类分组 | 设置日志分类条件并发送到不同的索引文件中去 |
Indices | 持久化数据存储 | 设置数据存储性能 |
Outputs | 日志数据的转发 | 解析的 Stream 发送到其他 Graylog 集群或服务 |
Pipelines | 日志数据的过滤 | 建立数据清洗的过滤规则、字段添加删除、条件过滤、自定义函数等 |
Sidecar | 轻量级的日志采集器 | 相当于 C/S 模式;大规模时使用 |
Lookup Tables | 服务解析 | 基于 IP 的 Whois 查询和基于来源 IP 的情报监控 |
Geolocation | 可视化地理位置 | 实现基于来源 IP 的情报监控 |
参考:https://docs.graylog.org/docs/
https://blog.csdn.net/wjandy0211/article/details/108485836
https://blog.csdn.net/qianshangding0708/article/details/121312622
单机部署GrayLog
使用docker-compose安装方便快捷。参考官网文档Docker - Installing Graylog
声明:此次安装基于centos8
docker-compose文件
version: '3'
services:
mongo:
image: mongo:4.2
networks:
- graylog
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true -Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 1g
networks:
- graylog
graylog:
image: graylog/graylog:4.2
environment:
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 #默认密码:admin
- GRAYLOG_HTTP_EXTERNAL_URI=http://ip:9000/ # ip修改为自己的
- GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai #设置时区
- GRAYLOG_ALLOW_HIGHLIGHTING=true #搜索高亮
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
networks:
- graylog
restart: always
depends_on:
- mongo
- elasticsearch
ports:
- 9000:9000
- 1514:1514
- 1514:1514/udp
- 12201:12201
- 12201:12201/udp
networks:
graylog:
driver: bridge
该文件从官网文档复制而来,我修改了三个地方,即访问graylog web页面的ip和端口、设置了时区、开启了搜索内容的高亮显示。更多的配置包括自定义配置文件、持久化数据可以参考官方文档。
在docker-compose文件所在目录下运行以下命令启动graylog
docker-compose up -d #-d以守护进程启动
启动成功后访问上方设置的ip:port进入graylog的后台地址,默认账号密码是admin/admin
配置输入也就是graylog的数据源,使用udp的方式接收日志。之后点击Launch new inputa
按钮,只需要输入Title 保存,其他默认即可。
spring 整合graylog
一般我们的程序都会使用logback或者其他日志框架收集日志,要想graylog能够显示我们的业务日志,只需要将日志数据写入graylog即可。
1.引入依赖
<dependency>
<groupId>de.siegmar</groupId>
<artifactId>logback-gelf</artifactId>
<version>3.0.0</version>
</dependency>
GELF扩展:一种日志格式,能避免传统意义上的
syslogs
的一些问题,而我们引入的Maven依赖则是把日志格式化成GELF
格式然后append到GrayLog上
2.在logback.xml文件中新增以下代码
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
<!-- Graylog服务的地址 -->
<graylogHost>IP</graylogHost>
<!-- UDP Input端口 -->
<graylogPort>12201</graylogPort>
<!-- 最大GELF数据块大小(单位:字节),508为建议最小值,最大值为65467 -->
<maxChunkSize>508</maxChunkSize>
<!-- 是否使用压缩 -->
<useCompression>true</useCompression>
<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>%d - [%thread] %-5level %logger{35} - %msg%n</pattern>
</fullPatternLayout>
<!-- 配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段 -->
<staticField>app_name:boss</staticField>
</encoder>
</appender>
注:将IP改为自己的。
3.启动程序,打开graylog的后台页面就能看到日志信息了。
GrayLog常用查询语法
这里列几个GrayLog常用的查询语法,更多语法可以查看官网文档:https://docs.graylog.org/docs/query-language
1.根据字段精准查询:full_message:"sys"
2.根据日志级别查询:level_name:"ERROR"
3.组合多字段查询 :app_name:"boss" AND full_message:"sys" AND level_name:"DEBUG"
更多操作
GrayLog的功能远不止这些,更多相关用法可以自行探索。
https://blog.csdn.net/abu935009066/article/details/119030784
参考官方文档