在本教程中,我们将介绍如何在CentOS 7上安装Graylog v1.3.x(有时称为Graylog2),并将其配置为在集中位置收集系统的syslog。Graylog是一个功能强大的日志管理和分析工具,具有许多用例,从监控SSH登录和异常活动到调试应用程序。它基于Elasticsearch,Java和MongoDB。
可以使用Graylog来收集和监视各种日志,但我们将本教程的范围限制为syslog收集。此外,因为我们正在演示Graylog的基础知识,所以我们将在单个服务器上安装所有组件。
Graylog有四个主要组成部分:
以下是Graylog组件的示意图(请注意,消息是从其他服务器发送的):
本教程将实现一个非常基本的Graylog设置,所有组件都安装在同一台服务器上。对于更大的生产设置,出于性能原因,建议在不同的服务器上安装组件。
本教程中描述的设置需要具有至少2GB RAM的CentOS 7服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。您还需要root或超级用户访问权限。
如果使用RAM小于2GB的VPS,则无法启动所有Graylog组件。
我们开始安装软件吧!
MongoDB安装简单快捷。运行以下命令将MongoDB公共GPG密钥导入rpm:
sudo rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc
创建MongoDB源列表:
echo '[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' | sudo tee /etc/yum.repos.d/mongodb-org-3.2.repo
使用以下命令安装最新的稳定版MongoDB:
sudo yum install -y mongodb-org
现在启动MongoDB:
sudo systemctl restart mongod
MongoDB现在应该启动并运行。让我们继续安装Java。
Elasticsearch和Logstash需要Java,所以我们现在就安装它。我们将安装最新版本的Oracle Java 8,因为这是Elasticsearch推荐的。但是,如果您决定走这条路,它应该可以与OpenJDK一起使用。遵循本节中的步骤意味着您接受Java SE的Oracle二进制许可协议。
切换到您的主目录并使用以下命令下载Oracle Java 8(更新73,撰写本文时的最新版本)JDK RPM:
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/8u73-b02/jdk-8u73-linux-x64.rpm"
然后使用此yum命令安装RPM(如果您下载了其他版本,请在此处替换文件名):
sudo yum -y localinstall jdk-8u73-linux-x64.rpm
现在Java应该安装在/usr/java/jdk1.8.0_73/jre/bin/java
,并从中链接/usr/bin/java
。
您可以删除先前下载的存档文件:
rm ~/jdk-8u*-linux-x64.rpm
现在已经安装了Java,让我们安装Elasticsearch。
Graylog 1.x仅适用于2.0版本的Elasticsearch,因此我们将安装Elasticsearch 1.7.x. 通过添加Elastic的包源列表,可以将Elasticsearch与包管理器一起安装。
运行以下命令将Elasticsearch公共GPG密钥导入rpm:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
通过运行此命令为Elasticsearch创建新的yum存储库文件:
echo '[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' | sudo tee /etc/yum.repos.d/elasticsearch.repo
使用以下命令安装Elasticsearch:
sudo yum -y install elasticsearch
Elasticsearch现已安装。让我们编辑配置:
sudo vi /etc/elasticsearch/elasticsearch.yml
找到指定cluster.name
的部分。取消注释,并用“graylog-development”替换默认值,如下所示:
cluster.name: graylog-development
您需要限制对Elasticsearch实例(端口9200)的外部访问,因此外人无法通过HTTP API读取您的数据或关闭您的Elasticsearch集群。找到指定network.host
的行,取消注释,并将其值替换为“localhost”,使其如下所示:
network.host: localhost
保存并退出elasticsearch.yml
。
现在启动Elasticsearch:
sudo systemctl restart elasticsearch
然后运行以下命令以在开启时启动Elasticsearch:
sudo systemctl enable elasticsearch
片刻之后,运行以下命令以测试Elasticsearch是否正常运行:
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
现在Elasticsearch已启动并运行,让我们安装Graylog服务器。
现在我们已经安装了其他所需的软件,让我们安装Graylog的服务器组件graylog-server
。
首先,使用以下命令将Graylog RPM软件包下载到您的系统:
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
现在我们必须配置管理员密码和密钥。密码密钥在server.conf中由password_secret
参数配置。我们可以生成一个随机密钥,并使用以下两个命令将其插入到Graylog配置中:
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf
通过创建一个指定shasum
所需的密码,并且将其分配到所述Graylog配置文件中的root_password_sha2
参数,可以分配管理员密码。使用以下命令创建所需密码的shasum,用您自己的密码替换突出显示的“密码”。sed命令为您将其插入到Graylog配置中:
PASSWORD=$(echo -n password | sha256sum | awk '{print $1}')
sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf
现在设置了管理员密码,让我们打开Graylog配置进行一些更改:
sudo vi /etc/graylog/server/server.conf
您在运行在上述步骤中的命令后,您应该看到password_secret
和root_password_sha2
会拥有随机字符串。
现在我们将配置rest_transport_uri
,这是Graylog Web界面与服务器通信的方式。因为我们要在单个服务器上安装所有组件,所以让我们将值设置为127.0.0.1
,或localhost
。查找并取消注释rest_transport_uri
,并更改其值,使其如下所示:
rest_transport_uri = http://127.0.0.1:12900/
接下来,因为我们只有一个Elasticsearch分片(在此服务器上运行),我们将elasticsearch_shards
的值更改为1:
elasticsearch_shards = 1
接下来,将elasticsearch_cluster_name
值更改为“graylog-development”(与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
已配置并准备启动。
使用service命令启动Graylog服务器:
sudo systemctl start graylog-server
下一步是安装Graylog Web界面。我们现在就这样做!
使用以下命令安装Graylog Web:
sudo yum -y install graylog-web
接下来,我们要配置Web界面的密钥,即web.conf中的application.secret
参数。我们将生成另一个键,就像我们使用Graylog服务器配置一样,并使用sed插入它,如下所示:
SECRET=$(pwgen -s 96 1)
sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /etc/graylog/web/web.conf
现在使用以下命令打开Web界面配置文件:
sudo vi /etc/graylog/web/web.conf
现在我们需要更新Web界面的配置以指定graylog2-server.uris
参数。这是服务器REST URI的逗号分隔列表。由于我们只有一个Graylog服务器节点,因此该值应与Graylog服务器配置中的rest_listen_uri
值匹配。
graylog2-server.uris="http://127.0.0.1:12900/"
现在配置了Graylog Web界面。启动Graylog Web界面:
sudo systemctl restart graylog-web
现在我们可以使用Graylog Web界面。我们现在就这样做。
在您喜欢的Web浏览器中,转到务器的公共IP地址的9000
端口:
In a web browser:http://graylog_public_IP:9000/
您应该看到一个登录屏幕。输入您之前设置的admin
用户名和管理员密码。
登录后,您将看到如下内容:
顶部的红色数字是通知。如果单击它,您将看到一条消息,指出您有一个没有任何运行输入的节点。让我们添加一个输入来接收UDP上的syslog消息。
要添加输入以接收系统日志消息,请单击顶部菜单中的系统下拉列表。
现在,从下拉菜单中选择Inputs。
从下拉菜单中选择Syslog UDP,然后单击Launch new input按钮。
将弹出“启动新输入:Syslog UDP ”模式窗口。输入以下信息(在服务器的私有IP地址中替换绑定地址):
syslog
8514
graylog_private_IP
然后单击Launch。
您现在应该在Local inputs部分看到一个名为“syslog”的输入(它应该有一个绿色框,旁边显示“running”),如下所示:
现在,我们的Graylog服务器已准备好从您的服务器接收端口8514
上的系统日志消息。让我们配置您的服务器,立即将他们的系统日志消息发送给Graylog。
在所有客户端服务器上,要将系统日志消息发送到Graylog的服务器,请执行以下步骤。
在/etc/rsyslog.d中创建rsyslog配置文件。我们将调用 90-graylog.conf
:
sudo vi /etc/rsyslog.d/90-graylog.conf
在此文件中,添加以下行以配置rsyslog以将系统日志消息发送到Graylog服务器(用Graylog服务器的专用IP地址来替换graylog_private_IP
):
$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
*.* @graylog_private_IP:8514;GRAYLOGRFC5424
保存并退出。从现在开始,此文件将作为rsyslog配置的一部分加载。现在,您需要重新启动rsyslog才能使更改生效。
sudo systemctl restart rsyslog
在要监视的所有服务器上完成rsyslog配置后,请返回Graylog Web界面。
在您喜欢的Web浏览器中,转到服务器的公共IP地址的9000
端口:
In a web browser:http://graylog_public_IP:9000/
单击顶部栏中的“ 来源 ”。您将看到已配置rsyslog的所有服务器的列表。
源的主机名在左侧,右侧是Graylog接收的消息数。
让Graylog收集邮件一段时间后,您将能够搜索邮件。例如,让我们搜索“sshd”,看看我们的服务器上发生了什么样的SSH活动。以下是我们结果的片段:
如您所见,我们的示例搜索结果显示了各种服务器的sshd日志,以及许多失败的root登录尝试。您的结果可能会有所不同,但它可以帮助您识别许多问题,包括未经授权的用户如何尝试访问您的服务器。
除了所有源上的基本搜索功能外,您还可以搜索特定主机的日志或特定时间范围内的日志。
例如,如果您想在事件发生后查看服务器或多个服务器的日志,则搜索Graylog中的数据非常有用。集中日志记录可以更轻松地关联相关事件,因为您无需登录多个服务器即可查看已发生的所有事件。
有关搜索栏如何工作的更多信息,请查看官方文档:Graylog搜索
现在您已经设置了Graylog,请随时浏览它提供的其他功能。您可以将其他类型的日志发送到Graylog,并设置提取器(或使用logstash等软件重新格式化日志),以使日志更加结构化和可搜索。您还可以通过分离组件并添加冗余来提高性能和可用性,从而扩展Graylog环境。
更多CentOS教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Install Graylog 1.x on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。