设置Graylog2日志分析器以存储和搜索日志错误

时间:2020-03-05 15:32:43  来源:igfitidea点击:

Graylog2是一个开源日志分析器工具,它使用MongoDB和ElasticSearch来存储和搜索日志错误。
开发人员主要使用它来检测和修复其应用程序中的错误。
与其他日志分析器工具相比,Graylog是一种更加成品和“企业就绪”的产品。

使用的版本:

Oracle Java:1.8.0_101
Graylog:2.0.3
Elasticsearch:2.3.3
MongoDB:3.2.9

1.准备工作

本教程中描述的安装需要具有至少4GB 内存的Ubuntu 16.
如果系统受内存大小限制,则可以考虑添加服务器的交换内存。

让我们首先更新和升级Ubuntu 16.04(Xenial Xerus)

root@ip-172-31-18-24:~# apt-get update && apt-get upgrade

接下来,通过更新/etc/hostname和/etc/hosts来配置服务器的FQDN。
我们将选择主机名作为graylog2,并选择域名作为theitroad.com。
我们可以根据自己的选择选择这两个值。

root@ip-172-31-18-24:~# vi /etc/hostname
graylog2

更新/etc/hosts

root@ip-172-31-18-24:~# vi /etc/hosts
127.0.0.1 localhost
172.31.18.24 graylog2.theitroad.com graylog2

如果我们使用的是任何基于云的服务,请确保已将preserve_hostname的值从false更改为true。

root@ip-172-31-18-24:~# vim /etc/cloud/cloud.cfg
..................
..................
preserve_hostname: true
..................
..................

重新启动服务器使更改生效。

root@ip-172-31-18-24:~# reboot

重新引导后,检查服务器的标准域名。

ubuntu@graylog2:~$hostname
graylog2
ubuntu@graylog2:~$hostname -f
graylog2.theitroad.com

2.安装JDK

Elasticsearch需要Java,因此我们将安装Oracle Java 8,因为Elastic推荐这样做。
但是,它也可以与OpenJDK一起很好地工作。

添加私有软件包归档文件webupd8team/java

root@graylog2:~# sudo add-apt-repository ppa:webupd8team/java
root@graylog2:~# sudo apt-get update

安装Oracle Java8

root@graylog2:~# sudo apt-get install oracle-java8-installer

在安装上述程序时接受许可证并将Oracle Java8设置为默认JVM

root@graylog2:~# sudo apt-get install oracle-java8-set-default

现在检查JAVA的版本

root@graylog2:~# java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

3.安装Elasticsearch

通过获取GPG签名密钥开始安装elasticsearch。

root@graylog2:~# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add 
OK

通过执行以下命令,将Eleasticsearch存储库添加到apt数据库。

root@graylog2:~#  echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch.list
deb https://packages.elastic.co/elasticsearch/2.x/debian stable main

更新apt数据库缓存并安装Elasticsearch

root@graylog2:~# apt-get update && sudo apt-get install elasticsearch

使Elasticsearch在系统启动时自动启动。

root@graylog2:~# systemctl enable elasticsearch

在配置elasticsearch时,设置集群名称(例如“ theitroad”)很重要。
我们将添加的仅有的两个其他参数是network.host和Discovery.zen.ping.unicast.hosts。
在Elasticsearch的配置文件中添加以下参数并保存。

root@graylog2:~# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: theitroad
network.host: 127.0.0.1
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

重新启动Elasticsearch服务以读取新配置。

root@graylog2:~# service elasticsearch restart

等待几秒钟,让Elasticsearch完全重启。
Elastisearch在端口9200上侦听以处理HTTP请求。
使用CURL测试elasticsearch。

root@graylog2:~#  curl -X GET http://localhost:9200
{
"name" : "Royal Roy",
"cluster_name" : "theitroad",
"version" : {
"number" : "2.4.0",
"build_hash" : "ce9f0c7394dee074091dd1bc4e9469251181fc55",
"build_timestamp" : "2015-08-29T09:14:17Z",
"build_snapshot" : false,
"lucene_version" : "5.5.2"
},
"tagline" : "You Know, for Search"
}

确保群集名称在上面显示为“ theitroad”

现在使用CURL测试Elasticsearch集群的运行状况。

root@graylog2:~#  curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
"cluster_name" : "theitroad",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}

上面的输出应显示为“绿色”状态

4.安装MongoDB

通过导入公钥开始安装MongoDB

root@graylog2:~# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
Executing: /tmp/tmp.iUI8C11LIe/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv
EA312927
gpg: requesting key EA312927 from hkp server keyserver.ubuntu.com
gpg: key EA312927: public key "MongoDB 3.2 Release Signing Key <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

通过使用以下命令创建/etc/apt/sources.list.d/mongodb-org.list文件,在apt数据库中添加mongodb存储库。

root@graylog2:~#  echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list
deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main

现在,使用以下命令安装MongoDB。

root@graylog2:~#  sudo apt-get update
root@graylog2:~#  sudo apt-get install mongodb-org

使用以下任何命令启动MongoDB。

root@graylog2:~# systemctl start mongod
OR
root@demohost:/etc/init.d# /etc/init.d/mongod start
* Starting database mongod                                                                                                 [ OK ]

最后在系统启动期间启用它。

root@graylog2:~# systemctl enable mongod
mongod.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install enable mongod

5.安装Graylog

要安装graylog2,请下载并安装graylog 2.x存储库。

root@graylog2:~# wget https://packages.graylog2.org/repo/packages/graylog-2.0-repository_latest.deb
root@graylog2:~# dpkg -i graylog-2.0-repository_latest.deb

在Ubuntu 16.04中预安装了对apt的HTTPS支持,如果缺少该支持,请安装它并更新apt数据库。

root@graylog2:~# sudo apt-get install apt-transport-https
root@graylog2:~# apt-get update

现在,使用以下命令安装Graylog服务器。

root@graylog2:~# sudo apt-get install  graylog-server

在配置Graylog2服务器时,我们需要提供root用户(admin)的密码和一个用于保护用户密码的密码。
因此,我们需要安装密码生成器来为我们生成密码。
使用以下命令安装pwgen。
我们需要管理员密码才能登录Graylog2的Web界面。
请记住,我们不能使用Web界面更改管理员密码。
我们需要手动编辑此变量以更改管理员密码。

root@graylog2:~# apt-get install pwgen

首先生成一个秘密。

root@graylog2:~# pwgen -N 1 -s 96
GSaULswcGz31ZCdd7aKhLNNx1aIflUSItH8TS1mY2Vnl8r4IkKTQKV4T9Jw3C1Jzmo7Jd1R1oqmRBavncIP8ExAqtijnfA68

现在为root用户生成密码,例如:admin

root@graylog2:~# echo -n password.123 | sha256sum
90dd9a873ed29902c543fe5cbb0a01268e7a7adadfc91bb135e800e1260f5cb2  

graylog2服务器配置的主要部分是在/etc/graylog/server /中配置server.conf

root@graylog2:~# vim /etc/graylog/server/server.conf

我们将从在/etc/graylog/server/server.conf中设置管理员密码和秘密密钥开始。
将以上两个密码分别粘贴到password_secret和root_password_sha2参数中。

password_secret = GSaULswcGz31ZCdd7aKhLNNx1aIflUSItH8TS1mY2Vnl8r4IkKTQKV4T9Jw3C1Jzmo7Jd1R1oqmRBavncIP8ExAqtijnfA68
root_password_sha2 = 90dd9a873ed29902c543fe5cbb0a01268e7a7adadfc91bb135e800e1260f5cb2

以下URI将用于接收消息,并且所有收集者都必须可以访问该URI。

rest_listen_uri = http://172.31.18.24:12900/

以下URI是REST API传输地址。
默认为rest_listen_uri的值

rest_transport_uri = http://graylog2.theitroad.com:12900/

Web界面侦听URI,它将用于访问浏览器中的graylog界面。

web_listen_uri = http://172.31.18.24:9000/

elasticsearch_shards定义Elasticsearch集群中的节点数,我们只有一个节点,将其值设置为1.

elasticsearch_shards = 1

这是我们索引的副本数,群集中只有一个节点。
将其值设置为0。

elasticsearch_replicas = 0

我们在配置elasticsearch时设置的Elasticsearch集群名称。

elasticsearch_cluster_name = theitroad

Graylog服务器将尝试使用多播模式自动查找Elasticsearch节点。
但是对于较大的网络,建议使用最适合生产的单播模式。

elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300

禁用多播

elasticsearch_discovery_zen_ping_multicast_enabled = false

在Graylog中为Elasticsearch客户端绑定地址。
我们可以跳过此步骤,让Elasticsearch自动选择这些值。

elasticsearch_network_host = 127.0.0.1
elasticsearch_network_bind_host = 127.0.0.1
elasticsearch_network_publish_host = 127.0.0.1

重新启动Graylog2,等待几秒钟以完全启动它。

root@graylog2:~# systemctl daemon-reload
root@graylog2:~# systemctl restart graylog-server
OR
root@demohost:~# /etc/init.d/graylog-server  start

6.配置防火墙

打开TCP端口9000(Graylog Web界面)和UDP端口514(Rsyslog),以分别允许进入Graylog2 Web界面和Rsyslog的通信。

对于IPTABLES用户

root@demohost:~# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT
root@demohost:~# iptables-save > /etc/iptables/rules.v4
root@demohost:~# service iptables-persistent restart

对于UFW用户

root@demohost:~# sudo ufw allow 9000/tcp
root@demohost:~# sudo ufw allow 514/udp
root@demohost:~# sudo ufw reload

7.配置Rsyslog

Rsyslog随ubuntu一起提供,因此我们不必安装它。
使用以下命令在服务器中列出此软件包。

root@graylog2:~# dpkg -l rsyslog

如果以上命令返回空白输出,则通过在终端中执行以下命令来安装rsyslog。

root@graylog2:~# apt-get install rsyslog
root@graylog2:~# systemctl start rsyslog
root@graylog2:~# netstat -alnp |grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 13549/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 13549/rsyslogd

一旦确定rsyslog在Graylog2服务器中正在运行,就让我们对其进行配置,以便Rsyslog将日志发送到Graylog2.

编辑/etc/rsyslog.conf并从以下各行中删除注释。

root@graylog2:~# vi /etc/rsyslog.conf
module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support
module(load="immark")  # provides --MARK-- message capability
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

接下来编辑/etc/rsyslog.d/50-default.conf并注释以下标准日志文件以禁用本地日志。

#auth,authpriv.* /var/log/auth.log
#*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
#kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
#mail.* -/var/log/mail.log
#user.* -/var/log/user.log

现在,在文件末尾添加以下行,以便rsyslog将日志数据发送到graylog服务器的端口号5140。

*.* @graylog2.theitroad.com:5140;GRAYLOG2

接下来,为rsyslog创建一个名称为90-graylog2.conf的模板文件,并添加以下信息。

root@graylog2:~# vi /etc/rsyslog.d/90-graylog2.conf
$template GRAYLOGRFC5424,"<%PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"
$PreserveFQDN on

重新启动Rsyslog

root@graylog2:~# systemctl restart rsyslog

在访问Graylog2 Web界面之前,请确保每个进程(例如elasticsearch,mongoDB,Graylog服务器及其Web界面)均已启动。
使用netstat命令检查它。

root @ graylog2:~netstat -pltn

8.访问Graylog Web界面

打开我们喜欢的浏览器,并将其指向http://YOUR-FQDN:9000。
我们将浏览器指向http://graylog2.theitroad.com:9000

以我们在步骤5中配置的admin和密码登录

单击系统->概述,并确保elasticsearch群集为绿色。

单击系统->输入,将输入选择为“ Syslog UDP”,然后单击“启动新输入”。
在第7步中配置Rsyslog时,提供标题名称,绑定地址为0.0.0.0或者127.0.0.1,端口号为我们在/etc/rsyslog.conf中定义的端口5140。
单击底部的“保存”。

保存后,请确保其正在运行。

现在测试Graylog2,我们将使用util-linux软件包的一部分的logger,将自动日志数据发送到Graylog服务器的UDP端口514.

thegeek@demohost:~$logger --server graylog2.theitroad.com --port 514 test Final message from VULTR123

像上面一样发送更多的自动化日志数据。

发送少量日志数据后,“吞吐量”部分的“网络IO”将显示日志数据的大小,直到接收到为止。
点击“显示收到的消息”