这篇文章记录了在CentOS 7上安装Graylog v1.3.x(也被叫做Graylog2)的步骤,并配置它收集其他服务器上的系统日志。
Graylog是强大的日志管理、分析工具。它基于 Elasticsearch, Java和MongoDB。
Graylog可以收集监控多种不同应用的日志。但是为了示范说明,我只收集syslog。并且,我将会把用到的组件全部安装到一个单独的服务器上。对于大型、生产系统你可以把组件分开安装在不同的服务器上,这样可以提高效率。
Graylog的组件
Graylog有4个基本组件:
Graylog Server:这个服务负责接收和处理日志/消息,并且和其他组件沟通。
Elasticsearch:存储所有的日志,它的性能依赖内存和硬盘IO。
MongoDB:存储元数据,负载不高。
Web接口:用户接口。
下面是Graylog组件之间的关系图:
系统要求:
CentOS 7
内存至少2GB
有root权限
下面开始安装。
安装MongoDB
MongoDB的安装非常简单,执行如下命令导入MongoDB GPG密钥到rpm:
$ sudo rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc
创建MongoDB源:
$ sudo vim /etc/yum.repos.d/mongodb-org-3.2.repo
写入如下内容
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
安装MongoDB:
$ sudo yum install -y mongodb-org
启动MongoDB:
$ sudo systemctl restart mongod
现在,MongoDB应该运行起来了。下一步我们来安装Java。
安装Java
Elasticsearch和Logstash需要需要Java运行环境。Elasticsearch建议安装最新版本的Oracle Java 8,但是使用OpenJDK也可以正常工作。
我这里安装Oracle Java 8 jdk,去http://www.oracle.com/下载最新的java jdk。我安装时的最新版本为jdk-8u77-linux-x64.rpm。
使用如下命令下载本版本(需要接受协议才能下载):
$ cd
$ wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm"
安装下载的rpm包:
$ sudo yum -y localinstall jdk-8u77-linux-x64.rpm
查看java版本:
$ java -version
安装Elasticsearch
Graylog目前为止只能使用Elasticsearch 2.0以前的版本,所以,在这一步中,我将安装Elasticsearch 1.7.x。
添加Elasticsearch GPG密钥:
$ sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
创建Elasticsearch源:
$ sudo vim /etc/yum.repos.d/elasticsearch.repo
写入如下内容:
[elasticsearch-1.7]
name=Elasticsearch repository for 1.7.x packages
baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
安装Elasticsearch:
$ sudo yum -y install elasticsearch
Elasticsearch安装完成之后,编辑配置文件:
sudo vim /etc/elasticsearch/elasticsearch.yml
找到cluster.name一行,取消这一行的注释,并把值改为graylog-development:
cluster.name: graylog-development
你也许想要限制外部访问Elasticsearch(端口9200),这样可以提高系统的安全性。找到network.host一行,取消注释,并把值改为localhost:
network.host: localhost
保存退出文件。
重启Elasticsearch:
$ sudo systemctl restart elasticsearch
设置开机启动:
$ sudo systemctl enable elasticsearch
执行如下命令测试Elasticsearch是否正常运行:
$ curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
输出的信息如下表示Elasticsearch安装成功:
安装Graylag
现在Graylog的所有依赖软件安装完成,这一步我们来安装graylog-server。
首先,下载Graylog RPM软件包:
$ cd
$ sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-1.3-repository-el7_latest.rpm
安装graylog-server:
$ sudo yum -y install graylog-server
安装pwgen,我们使用它生成随机密码:
$ sudo yum -y install epel-release
$ sudo yum -y install pwgen
现在我们来设置Graylog管理员的密钥。配置文件位于/etc/graylog/server/server.conf目录,需要修改password_secret参数:
$ SECRET=$(pwgen -s 96 1)
$ sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf
执行完上面命令之后,password_secret参数的样子:
这一步,设置管理员密码。由于密码使用sha哈希算法,我们需要把明文密码转换为hash,然后赋值给root_password_sha2参数。例如,我要设置的管理员密码是 test1234,它对应的hash为:
$ echo -n test1234 | sha256sum | awk '{print $1}'
编辑/etc/graylog/server/server.conf,设置root_password_sha2参数:
$ sudo vim /etc/graylog/server/server.conf
现在Graylog管理员密码为test1234。
配置rest_transport_uri参数,设置Graylog web接口和服务器的沟通方式。由于我们把所有组件都安装到了单独的一个服务器上,需要把值设置为127.0.0.1 或 localhost。找到rest_transport_uri一行,取消注释,并把值设置为:
rest_transport_uri = http://127.0.0.1:12900/
由于我们只有一个Elasticsearch shard,需要把elasticsearch_shards参数设置为1:
elasticsearch_shards = 1
更改elasticsearch_cluster_name参数,应该和前面Elasticsearch的cluster.name参数相对应:
elasticsearch_cluster_name = graylog-development
取消下面两行的注释,检测Elasticsearch:
elasticsearch_discovery_zen_ping_multicast_enabled = false
elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
启动graylog-server:
$ sudo systemctl start graylog-server
下一步安装Graylog web接口。
安装Graylog Web
安装Graylog Web:
$ sudo yum -y install graylog-web
安装完成之后配置Graylog Web的密钥,配置文件位于/etc/graylog/web/web.conf,更改application.secret参数:
$ SECRET=$(pwgen -s 96 1)
$ sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /etc/graylog/web/web.conf
配置graylog2-server.uris参数,它的值应该和Graylog的rest_listen_uri参数相对应:
$ sudo vim /etc/graylog/web/web.conf
graylog2-server.uris="http://127.0.0.1:12900/"
重启graylog-web:
$ sudo systemctl restart graylog-web
配置Graylog服务器接收其他服务器的syslog日志
登录Graylog Web
使用浏览器访问Graylog服务器的域名或IP:http://graylog_public_IP_domain:9000/。
你应该能看到一个登录界面,使用admin做为用户名和前面设置的密码登录。
登录之后:
上面的红数字1是通知(you have a node without any running inputs),下面设置通过UDP接收syslog。
创建syslog UDP输入
添加要接收的其他服务器syslog日志:System->Inputs->Syslog UDP->Launch new input。
在弹出的窗口上输入如下信息:
Title: syslog
Port: 8514
Bind address: 要收集的其他服务器ip地址
点击Launch
如果你需要收集多个服务器的日志,重复上面步骤。
现在,我们的Graylog服务器已经做好了接收其他服务器发来日志的准备。下面我们还需要配置其他服务器,让这些服务器给Graylog服务器发送日志。
配置其他服务器给Graylog服务器发送syslog
SSH登录“其他服务器”,创建rsyslog配置文件90-graylog.conf:
sudo vim /etc/rsyslog.d/90-graylog.conf
添加如下代码,把 graylog_server_IP 替换为Graylog服务器ip地址:
$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
*.* @graylog_server_IP:8514;GRAYLOGRFC5424
重启rsyslog服务使生效:
$ sudo systemctl restart rsyslog
配置完成之后,回到Graylog Web,点击Sources,查看是否有新添加rsyslog。
搜素Graylog
假如你要搜索ssh活动:
上面安装配置了基本的Graylog服务器。
参考:http://docs.graylog.org/en/1.3/