比ELK更简洁、高效!企业级日志平台后起之秀Graylog

大千世界 174 0

  Graylog 服务介绍

  Graylog - 日志监控系统

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

  Graylog - 工作流程介绍

  部署 graylog 最简单的架构就是单机部署,复杂的也是部署集群模式,架构图如下所示。我们可以看到其中包含了三个组件,分别是 Elasticsearch、MongoDb 和 Graylog。其中,Elasticsearch 用来持久化存储和检索日志文件数据(IO 密集),MongoDb 用来存储关于 Graylog 的相关配置。 而Graylog 来提供 Web 界面和对外接口的(CPU 密集)。

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第1张图片-大千世界


  最优化集群部署

  Graylog 组件功能

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

  简单来讲,Input 表示日志数据的来源,对不同来源的日志可以通过 Extractors 来进行日志的字段转换,比如将日记 Nginx 的状态码变成对应的英文表述等。然后,通过不同的标签类型组成不同的标签 Stream,并将这些日志数据存储到指定的地方 Index 库中进行了持久化保存。

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第2张图片-大千世界


  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 也能应付自如。

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第3张图片-大千世界


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

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第4张图片-大千世界


  部署 Filebeat 工具

  官方提供了多种的部署方式,包括通过 rpm 和 deb 包括安装服务,以及源代码编译的方式安装服务,同时包括了使用 Docker 或者 kubernetes 的方式安装服务。我们根据自己的实际需要,进行安装即可。

  # Ubuntu(deb)

  $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb

  $ sudo dpkg -i filebeat-7.8.1-amd64.deb

  $ sudo systemctl enable filebeat

  $ sudo service filebeat start

  # 使用docker启动

  docker run -d --name=filebeat --user=root \

  --volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \

  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \

  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \

  docker.elastic.co/beats/filebeat:7.8.1 filebeat -e -strict.perms=false \

  -E output.elasticsearch.hosts=["elasticsearch:9200"]

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第5张图片-大千世界


  部署 Graylog 服务

  我们这里主要介绍使用 Docker 容器来部署服务,如果你需要使用其他方式来部署的话,请自行查看官方文档对应章节的安装部署步骤。在服务部署之前,我们需要给 Graylog 服务生成等相关信息,生成部署如下所示:

  # 生成password_secret密码(最少16位)

  $ sudo apt install -y pwgen

  $ pwgen -N 1 -s 16

  zscMb65...FxR9ag

  # 生成后续Web登录时所需要使用的密码

  $ echo -n "Enter Password: " && head -1

  Enter Password: zscMb65...FxR9ag

  77e29e0f...557515f

  生成所需密码信息之后,我们将如下 yml 信息保存到 docker-comopse.yml 文件中,使用 docker-compose 命令启动该服务,即可完成部署。之后,通过浏览器访问对应服务器地址的 9000 端口,即可登录主页 。

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第6张图片-大千世界


  需要注意的是,GELF(Graylog Extended Log Format) 的 input 模式可以接受结构化的事件,支持压缩和分块。恰好,Docker 服务的 log-driver 驱动原生提供了 GELF 的支持。只需要我们在 Graylog 的 system/inputs 下面创建对应的 input 之后,启动容器的时候指定 log-driver,就可以将容器内的输出都会发送到 Graylog 里面了。

  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第7张图片-大千世界


  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第8张图片-大千世界


  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第9张图片-大千世界


  

比ELK更简洁、高效!企业级日志平台后起之秀Graylog-第10张图片-大千世界


标签: 日志

抱歉,评论功能暂时关闭!