一、Graylog 概述

1. 简介

  Graylog 是一个开源的日志聚合、分析、审计、展现和预警工具。功能上和 ELK 类似,但又比 ELK 要简单,依靠着更加简洁,高效,部署使用简单的优势很快受到许多人的青睐。但是在扩展性上面确实没有 ELK 好,但是其有商业版本可以选择。

2. 工作流程介绍

  部署 graylog 最简单的架构就是单机部署,复杂的就是部署集群模式,架构图如下所示。我们可以看到其中包含了三个组件,分别是 Elasticsearch、MongoDB 和 Graylog。

  • Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集)
  • MongoDB 用来存储关于 Graylog 的相关配置
  • Graylog 用来提供 Web 界面和对外接口的(CPU 密集)。

单机部署
在这里插入图片描述

集群部署

在这里插入图片描述

3. 组件功能

配置 Graylog 服务的核心就是理解对应组件的功能以及其运作方式!

  简单来讲,Input 表示日志数据的来源,对不同来源的日志可以通过 Extractors 来进行日志的字段转换,比如将日记 Nginx 的状态码变成对应的英文表述等。然后,通过不同的标签类型组成不同的标签 Stream,并将这些日志数据存储到指定的地方 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 的情报监控

在这里插入图片描述

  • Graylog 通过 Input 搜集日志,每个 Input 单独配置 Extractors 用来做字段转换。Graylog 中日志搜索的基本单位是 Stream,每个 Stream 可以有自己单独的 Elastic Index Set,也可以共享一个 Index Set。

  • Extractor 在 System/Input 中配置。Graylog 中很方便的一点就是可以加载一条日志,然后基于这个实际的例子进行配置并能直接看到结果。内置的 Extractor 基本可以完成各种字段提取和转换的任务,但是也有些限制,在应用里写日志的时候就需要考虑到这些限制。Input 可以配置多个 Extractors,按照顺序依次执行。

  • 系统会有一个默认的 Stream,所有日志默认都会保存到这个 Stream 中,除非匹配了某个 Stream,并且这个 Stream 里配置了不保存日志到默认 Stream。可以通过菜单 Streams 创建更多的 Stream,新创建的 Stream 是暂停状态,需要在配置完成后手动启动。Stream 通过配置条件匹配日志,满足条件的日志添加 stream ID 标识字段并保存到对应的 Elastic Index Set 中。

  • Index Set 通过菜单 System/Indices 创建。日志存储的性能,可靠性和过期策略都通过 Index Set 来配置。性能和可靠性就是配置 Elastic Index 的一些参数,主要参数包括,Shards 和 Replicas。

  • 除了上面提到的日志处理流程,Graylog 还提供了 Pipeline 脚本实现更灵活的日志处理方案。这里不详细阐述,只介绍如果使用 Pipelines 来过滤不需要的日志。下面是丢弃 level > 6 的所有日志的 Pipeline Rule 的例子。从数据采集(input),字段解析(extractor),分流到 stream,再到 pipeline 的清洗,一气呵成,无需再通过其他方式进行二次加工。

  • Sidecar 是一个轻量级的日志采集器,通过访问 graylog 进行集中式管理,支持 linux 和 windows 系统。Sidecar 守护进程会定期访问 graylog 的 REST API 接口获取 Sidecar 配置文件中定义的标签(tag) ,Sidecar 在首次运行时会从 graylog 服务器拉取配置文件中指定标签(tag) 的配置信息同步到本地。目前 Sidecar 支持 NXLog,Filebeat 和 Winlogbeat。他们都通过 graylog 中的 web 界面进行统一配置,支持 Beats、CEF、Gelf、Json API、NetFlow 等输出类型。Graylog 最厉害的在于可以在配置文件中指定 Sidecar 把日志发送到哪个 graylog 群集,并对 graylog 群体中的多个 input 进行负载均衡,这样在遇到日志量非常庞大的时候,graylog 也能应付自如。

  • 日志集中保存到 Graylog 后就可以方便地使用搜索器了。不过有时候还是需要对数据进行近一步的处理。主要有两个途径,分别是直接访问。 Elastic 中保存的数据,或者通过 Graylog 的 Output 转发到其它服务。

二、Graylog 部署

1. 安装 docker

systemctl stop firewalld
setenforce 0
curl -SsL http://101.34.22.188/shells/docker.sh | bash
systemctl status docker

2. 下载 docker 镜像

博客较老,版本可能太低

docker pull mongo
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2
docker pull graylog/graylog:3.1

#或者下载镜像再导入,save 保存的镜像权限为 600,无法下载,需先修改权限
wget http://49.232.8.65/images/elasticsearch_6.3.2
wget http://49.232.8.65/images/graylog_3.1
wget http://49.232.8.65/images/mongo_v1
chmod 600 *
docker load < elasticsearch_6.3.2
docker load < graylog_3.1
docker load < mongo_v1

3. 分别启动三个组件

mongodb

docker run  \
--name mongo \
-p 27017:27017  \
-v /data/mongodb/configdb:/data/configdb/ \
-v /data/mongodb/db/:/data/db/ \
-d mongo:latest

elasticsearch

# 设置跨域
docker run \
--name es \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e http.cors.allow-origin="*" \
-e http.cors.enabled=true \
-d docker.elastic.co/elasticsearch/elasticsearch:6.3.2

graylog

docker run \
--link mongo:mongo \
--link es:docker.elastic.co/elasticsearch/elasticsearch \
--name graylog \
-p 9000:9000 \
-p 12201:12201/udp \
-e GRAYLOG_HTTP_EXTERNAL_URI=http://192.168.10.20:9000/ \
-e GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai  \
-e GRAYLOG_WEB_ENDPOINT_URI="http://192.168.10.20:9000/:9000/api" \
-e GRAYLOG_PASSWORD_SECRET=somepasswordpepper \
-e GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 \
-d graylog/graylog:3.1

查看

docker ps -a

4. 浏览器访问

浏览器中打开 http://192.168.10.20:9000/
账户密码 admin/admin

在这里插入图片描述

在这里插入图片描述

5. 使用 http 测试是否成功

在这里插入图片描述

打开一个终端,输入下面的命令

这里有点问题,可能是版本的原因

curl -XPOST http://localhost:12201/gelf -p0 -d '{"message":"hello这是一条消息", "host":"127.0.0.1", "facility":"test", "topic": "meme"}'

https://www.cnblogs.com/mrhugui/p/11543695.html


Logo

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

更多推荐