GrayLog简介

GrayLog是一个轻量型的分布式日志管理平台,一个开源的日志聚合、分析、审计、展示和预警工具。在功能上来说,和 ELK类似,但又比 ELK要简单轻量许多。依靠着更加简洁,高效,部署使用简单的优势很快受到许多公司的青睐。

GrayLog包含 ElasticsearchMongoDbGraylog三个模块。其中,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上

https://docs.graylog.org/docs/gelf

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

参考官方文档

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐