Graylog简介
Graylog是一个开源且完整的日志聚合、管理工具,提到日志管理想必大家都会想到ELK平台,Graylog功能和ELK类似,但又比ELK要易用,相对的日志分析能力以及一些功能没有ELK强大。所以Graylog与ELK各有优劣,ELK被诟病的地方主要是不善于处理多行日志,同时也不能保留原始日志格式,只能把原始日志分字段保存,因为不符合正则表达式匹配的日志行,会被全部丢弃。
而Graylog则更擅长处理多行日志,支持原始日志格式的采集,在采集后可以再添加字段,例如http_status_code,response_time等等。除此之外,Graylog还支持自己开发的日志采集脚本,这一点带来了很大的自由度。在安装方面Graylog提供了一体化方案,安装方便,不像ELK需要搭建3个独立系统从而带来系统间的集成问题。
Graylog基本架构图如下:
从架构图的左边部分可以看到,设备或应用的日志数据通过网络传输的方式发送到Graylog服务器上,然后我们可以从浏览器上查看日志数据。图中的右边部分可以看到有两个数据库MongoDB和Elasticsearch,其中MongoDB主要用于存储Graylog的配置数据和元数据,而日志数据则是存储在Elasticsearch中,同时Elasticsearch也作为日志数据的搜索引擎。
Graylog也很好的支持集群,集群架构图如下:
Graylog更细致的架构图如下:
官方文档地址:
Graylog搭建
在上一小节中,我们简要介绍了Graylog,知道了这是一个什么工具,本小节我们就来搭建一个Graylog服务。首先到官网查看安装方式,官网地址如下:
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
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
配置项的值即可:
[[email protected] ~]# echo -n "Enter Password: " && head -1 </dev/stdin | tr -d ‘\n‘ | sha256sum | cut -d" " -f1
Enter Password: 123456a # 输入明文密码
f707fdda7c874ff49ebfb2c88a2860c5ff4ce3d94a21efb76566ad0f92c9ad57 # SHA2加密后的密码
[[email protected] ~]#
2.然后将docker-compose.yml放到一个目录下,具体放在什么目录可以自行定义,我这里是放在/usr/local/graylog
目录下:
[[email protected] ~]# cd /usr/local
[[email protected] /usr/local]# mkdir graylog
[[email protected] /usr/local]# cd graylog/
[[email protected] /usr/local/graylog]# ls
docker-compose.yml
[[email protected] /usr/local/graylog]#
3.接着使用docker-compose命令启动这个容器:
[[email protected] /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:
日志数据可以在Search界面查看,但是我们需要先配置一下日志数据的入口,System -> Inputs:
选择GELF UDP:
然后点击Launch new input按钮,会弹出如下输入框,勾选Global,配置如下即可:
点击Save后完成配置,然后我们就可以通过12201这个端口去发送日志数据给Graylog了:
具体如何将日志数据发送给Graylog服务,将在下一篇中进行介绍
原文地址:https://blog.51cto.com/zero01/2381063