Graylog简介

Graylog是一个开源且完整的日志聚合、管理工具,提到日志管理想必大家都会想到ELK平台,Graylog功能和ELK类似,但又比ELK要易用,相对的日志分析能力以及一些功能没有ELK强大。所以Graylog与ELK各有优劣,ELK被诟病的地方主要是不善于处理多行日志,同时也不能保留原始日志格式,只能把原始日志分字段保存,因为不符合正则表达式匹配的日志行,会被全部丢弃。

而Graylog则更擅长处理多行日志,支持原始日志格式的采集,在采集后可以再添加字段,例如http_status_code,response_time等等。除此之外,Graylog还支持自己开发的日志采集脚本,这一点带来了很大的自由度。在安装方面Graylog提供了一体化方案,安装方便,不像ELK需要搭建3个独立系统从而带来系统间的集成问题。

Graylog基本架构图如下:
Docker安装Graylog

从架构图的左边部分可以看到,设备或应用的日志数据通过网络传输的方式发送到Graylog服务器上,然后我们可以从浏览器上查看日志数据。图中的右边部分可以看到有两个数据库MongoDB和Elasticsearch,其中MongoDB主要用于存储Graylog的配置数据和元数据,而GELF(Graylog Extended Log Format)格式的日志数据则会被存储在Elasticsearch中,同时Elasticsearch也作为日志数据的搜索引擎。

Graylog也很好的支持集群,集群架构图如下:
Docker安装Graylog

Graylog更细致的架构图如下:
Docker安装Graylog

官方文档地址:

http://docs.graylog.org/en/3.0/pages/architecture.html


Graylog搭建

在上一小节中,我们简要介绍了Graylog,知道了这是一个什么工具,本小节我们就来搭建一个Graylog服务。首先到官网查看安装方式,官网地址如下:

https://www.graylog.org/

Graylog官方提供了多种安装方式,官网截图:
Docker安装Graylog

我这里安装的是当前最新的3.0版本,安装方式为Docker,官方Docker安装文档地址如下:

http://docs.graylog.org/en/stable/pages/installation/docker.html

Graylog配置项官方文档如下:

http://docs.graylog.org/en/stable/pages/configuration/server.conf.html

因为本文使用Docker来进行安装,所以需要提前准备好Docker环境。除此之外,还需要先搭建好MongoDB和Elasticsearch服务,虽然官方提供了一体化的安装方式,但是通常不会使用一体化的安装,而是将MongoDB和Elasticsearch独立安装,因为这两个组件是通用的服务,大多数情况下不仅Graylog服务需要用到,其他的一些项目或服务也都可能会用到,而且单独安装也方便于环境调优。关于Docker环境的安装以及这两个服务的搭建可以参考我另外几篇文章,本文不进行赘述:


以下是我的安装步骤:

1.首先创建一个docker-compose.yml文件,编辑文件内容如下:

version: '2'
services:
  # Graylog: https://hub.docker.com/r/graylog/graylog/
  graylog:
    image: graylog/graylog:3.0
    environment:
      # 配置项需以GRAYLOG_开头,并且是全大写的
      # 密码加密盐值,不能小于16个字符
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      # 用户名配置项,默认为admin
      - GRAYLOG_ROOT_USERNAME=admin
      # 此处的密码是经过SHA2算法加密后的密码,默认为admin
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      # 这里需要填一个可以在外部访问的地址,我这里填的是宿主机的地址,否则无法通过浏览器访问
      - GRAYLOG_HTTP_EXTERNAL_URI=http://192.168.190.129:9000/
      # 配置Elasticsearch连接地址,多节点使用逗号分隔
      - GRAYLOG_ELASTICSEARCH_HOSTS=http://192.168.190.129:9200
      # 配置MongoDB连接地址,多节点使用逗号分隔
      - GRAYLOG_MONGODB_URI=mongodb://192.168.190.129:27017/graylog
      # 配置时区
      - GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
    ports:
      # Graylog web interface and REST API
      - 9000:9000
      # Syslog TCP
      - 1514:1514
      # Syslog UDP
      - 1514:1514/udp
      # GELF TCP
      - 12201:12201
      # GELF UDP
      - 12201:12201/udp

通常我们都不会使用默认的密码,使用如下命令可以生成SHA2加密后的密码,然后替换GRAYLOG_ROOT_PASSWORD_SHA2配置项的值即可:

[root@study-01 ~]# echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Enter Password: 123456a  # 输入明文密码
f707fdda7c874ff49ebfb2c88a2860c5ff4ce3d94a21efb76566ad0f92c9ad57  # SHA2加密后的密码
[root@study-01 ~]# 

2.然后将docker-compose.yml放到一个目录下,具体放在什么目录可以自行定义,我这里是放在/usr/local/graylog目录下:

[root@study-01 ~]# cd /usr/local
[root@study-01 /usr/local]# mkdir graylog
[root@study-01 /usr/local]# cd graylog/
[root@study-01 /usr/local/graylog]# ls
docker-compose.yml
[root@study-01 /usr/local/graylog]#

3.接着使用docker-compose命令启动这个容器:

[root@study-01 /usr/local/graylog]# docker-compose up
# Graylog启动成功的情况下会打印这么一句日志
graylog_1  | 2019-04-18 16:47:50,732 INFO : org.graylog2.bootstrap.ServerBootstrap - Graylog server up and running.

注:这种方式是前台启动,若希望后台启动则加上-d参数即可

启动成功后通过浏览器访问9000端口可以进入如下登录界面,我这里使用的默认用户名和密码,所以均为admin:
Docker安装Graylog

日志数据可以在Search界面查看,但是我们需要先配置一下日志数据的入口,System -> Inputs:
Docker安装Graylog

选择GELF UDP:
Docker安装Graylog

然后点击Launch new input按钮,会弹出如下输入框,勾选Global,配置如下即可:
Docker安装Graylog

点击Save后完成配置,然后我们就可以通过12201这个端口去发送日志数据给Graylog了:
Docker安装Graylog

具体如何将日志数据发送给Graylog服务,将在下一篇中进行介绍: