1、介绍
Graylog 是一个开源的日志管理和分析平台,旨在帮助企业集中收集、存储、搜索和分析来自各种来源的日志数据。它提供了强大的实时日志处理能力,适用于大规模分布式系统和复杂的生产环境。
主要功能
-
集中化日志管理:
收集来自不同来源的日志,包括应用程序、服务器、网络设备等。
支持多种输入插件,如GELF(Graylog Extended Log Format)、Syslog、Beats等。 -
实时日志分析:
提供实时日志流处理和可视化功能。
支持复杂的查询语言,可以快速定位和分析问题。 -
告警和通知:
可以设置基于规则的告警,当满足特定条件时触发通知。
支持多种通知方式,如电子邮件、Slack、PagerDuty等。 -
仪表盘和报表:
创建自定义仪表盘,展示关键指标和趋势。
生成定期报表,帮助团队了解系统健康状况。 -
扩展性和灵活性:
支持横向扩展,能够处理海量日志数据。
提供丰富的插件和API,方便集成到现有基础设施中。
graylog依赖框架
- mongodb
- elasticsearch
mongodb主要负责持久化切块存储,elasticsearch则用于全文检索提升检索速度
2、graylog部署
(1)安装docker【略】
(2)安装docker-compose
i、官网下载安装包安装
https://github.com/docker/compose/releases
(ii)将文件上传服务器,修改文件名为docker-compose
(iii)授权文件
sudo chmod +x /usr/local/bin/docker-compose
(iv)创建软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
(v)查看版本
docker-compose --version
安装完毕
(3)安装graylog
(i)创建目录并授权
mkdir -p /opt/app/logs/graylog/mongo_data
mkdir -p /opt/app/logs/graylog/es_data
mkdir -p /opt/app/logs/graylog/graylog_data
mkdir -p /opt/app/logs/graylog/graylog_data/config
chmod 777 -R /opt/app/logs/graylog/mongo_data
chmod 777 -R /opt/app/logs/graylog/es_data
chmod 777 -R /opt/app/logs/graylog/graylog_data
chmod 777 -R /opt/app/logs/graylog/graylog_data/config
(ii)下载配置文件
wget http://raw.githubusercontent.com/Graylog2/graylog-docker/4.3/config/graylog.conf
wget http://raw.githubusercontent.com/Graylog2/graylog-docker/4.3/config/log4j2.xml
(iii)修改配置文件
vim /opt/graylog/graylog_data/config/graylog.conf
新增:
国内时区:root_timezone = PRC
修改
查询高亮:allow_highlighting = true
(iv)进到目录/opt/app/logs/graylog/graylog_data/config创建docker-compose.yml
version: '3'
services:
mongodb:
container_name: mongodb
image: mongo:4.4.0
restart: always
volumes:
- /opt/graylog/mongo_data:/data/db
- /etc/localtime:/etc/localtime:ro
- /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
container_name: elasticsearch
restart: always
volumes:
- /opt/graylog/es_data:/usr/share/elasticsearch/data
- /etc/localtime:/etc/localtime:ro
- /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
ports:
- 9200:9200
- 9300:9300
environment:
- TZ=Asia/Shanghai
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- http.cors.allow-origin=*
- http.cors.enabled=true
- discovery.type=single-node
- 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m'
graylog:
image: graylog/graylog:4.3.6
container_name: graylog
restart: always
volumes:
- /opt/graylog/graylog_data:/usr/share/graylog/data
- /etc/localtime:/etc/localtime:ro
- /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9191/
- GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
- GRAYLOG_ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- TZ=Asia/Shanghai
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
depends_on:
- mongodb
- elasticsearch
links:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9191:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
(v) 启动
docker-compose up -d
docker-compose -f docker-compose.yml up -d
完成部署
3、使用
(1)项目集成
(i)项目引入依赖【使用合适版本,存在坑,不兼容问题】
<dependency>
<groupId>de.siegmar</groupId>
<artifactId>logback-gelf</artifactId>
<version>6.1.1</version>
</dependency>
兼容表如下
官网:https://go2docs.graylog.org/5-2/downloading_and_installing_graylog/installing_graylog.html
(ii)配置
在日志配置文件添加以下配置【记得注册一下】
<!-- graylog日志配置 -->
<appender name="GELF_LOG" class="de.siegmar.logbackgelf.GelfUdpAppender">
<!-- Graylog服务的地址 -->
<graylogHost>113.45.184.58</graylogHost>
<!-- UDP Input端口 -->
<graylogPort>12201</graylogPort>
<!--以下为可选配置-->
<maxChunkSize>508</maxChunkSize>
<useCompression>true</useCompression>
<encoder class="de.siegmar.logbackgelf.GelfEncoder">
<!-- 是否发送原生的日志信息 -->
<includeRawMessage>true</includeRawMessage>
<includeMarker>true</includeMarker>
<includeMdcData>true</includeMdcData>
<includeCallerData>true</includeCallerData>
<includeRootCauseData>true</includeRootCauseData>
<includeLevelName>true</includeLevelName>
<!-- 是否发送日志级别的名称,否则默认以数字代表日志级别 -->
<includeLevelName>true</includeLevelName>
<shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
<pattern>%m%nopex</pattern>
</shortPatternLayout>
<fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
<!-- 使用定义的格式模式 -->
<pattern>[%-5level]\t%d{yyyy-MM-dd HH:mm:ss.SSS}\t%thread\t%logger\t%file:%line\t[%X{traceid}]\t%msg%n</pattern>
</fullPatternLayout>
<!--
配置应用名称(服务名称),通过staticField标签可以自定义一些固定的日志字段
-->
<staticField>app_name:${APP_NAME}</staticField>
</encoder>
</appender>
(2)打开控制台绑定项目
(i) 访问平台
http://ip:端口
eg: http://127.0.0.1:9999
账号/密码:admin/admin
(ii)设置保存时间
(iii)绑定项目