如何在CentOS7上安装Graylog1.x
介绍
在本教程中,我们将介绍如何在 CentOS 7 上安装 Graylog v1.3.x(有时称为 Graylog2),并将其配置为在一个集中位置收集系统的 syslog。 Graylog 是一个强大的日志管理和分析工具,它有许多用例,从监视 SSH 登录和异常活动到调试应用程序。 它基于 Elasticsearch、Java 和 MongoDB。
可以使用 Graylog 来收集和监控大量日志,但我们会将本教程的范围限制为 syslog 收集。 此外,因为我们正在演示 Graylog 的基础知识,所以我们将在单个服务器上安装所有组件。
关于 Graylog 组件
Graylog 有四个主要组件:
- Graylog Server 节点:作为一个worker,接收和处理消息,并与所有其他非服务器组件进行通信。 它的性能取决于 CPU
- Elasticsearch 节点:存储所有日志/消息。 它的性能取决于 RAM 和磁盘 I/O
- MongoDB:存储元数据,负载不大
- Web界面:用户界面
这是 Graylog 组件的图表(请注意,消息是从您的其他服务器发送的):
本教程将实现一个非常基本的 Graylog 设置,所有组件都安装在同一台服务器上。 对于较大的生产设置,出于性能原因,建议将组件安装在单独的服务器上。
先决条件
本教程中描述的设置需要具有至少 2GB RAM 的 CentOS 7 服务器。 您还需要 root 或超级用户访问权限( 使用 CentOS 7 进行初始服务器设置的步骤 1-4)。
如果您使用 RAM 小于 2GB 的 VPS,您将无法启动所有 Graylog 组件。
让我们开始安装软件吧!
安装 MongoDB
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。
安装 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。
安装 Elasticsearch
Graylog 1.x 仅适用于 Elasticsearch 2.0 之前的版本,因此我们将安装 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”,如下所示:
elasticsearch.yml - 1 of 2
cluster.name: graylog-development
您需要限制对 Elasticsearch 实例(端口 9200)的外部访问,因此外部人员无法通过 HTTP API 读取您的数据或关闭您的 Elasticsearch 集群。 找到指定 network.host
的行,取消注释,并将其值替换为“localhost”,如下所示:
elasticsearch.yml — 2 个,共 2 个
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 的服务器组件,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
现在我们必须配置 admin 密码和密钥。 密码密钥在 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
admin 密码是通过创建所需密码的 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
,并更改它的值,使其如下所示:
/etc/graylog/server/server.conf — 1 of 4
rest_transport_uri = http://127.0.0.1:12900/
接下来,因为我们只有一个 Elasticsearch 分片(在这台服务器上运行),我们将 elasticsearch_shards
的值更改为 1:
/etc/graylog/server/server.conf — 2 of 4
elasticsearch_shards = 1
接下来,将 elasticsearch_cluster_name
的值更改为“graylog-development”(与 Elasticsearch cluster.name
相同):
/etc/graylog/server/server.conf — 3 of 4
elasticsearch_cluster_name = graylog-development
取消注释这两行以使用单播而不是多播来发现 Elasticsearch 实例:
/etc/graylog/server/server.conf — 4 个,共 4 个
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
使用以下命令安装 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
的值匹配(即 “http://127.0.0.1:12900/”)。
/etc/graylog/web/web.conf 摘录
graylog2-server.uris="http://127.0.0.1:12900/"
现在已配置 Graylog Web 界面。 启动 Graylog Web 界面:
sudo systemctl restart graylog-web
现在我们可以使用 Graylog Web 界面了。 现在让我们这样做。
配置 Graylog 以接收系统日志消息
登录 Graylog Web 界面
在您喜欢的 Web 浏览器中,转到服务器公共 IP 地址的端口 9000
:
In a web browser:http://graylog_public_IP:9000/
您应该会看到一个登录屏幕。 输入 admin
作为您的用户名和您之前设置的管理员密码。
登录后,您将看到类似以下内容:
顶部的红色数字是通知。 如果单击它,您将看到一条消息,说明您有一个没有任何运行输入的节点。 现在让我们添加一个输入以通过 UDP 接收系统日志消息。
创建 Syslog UDP 输入
要添加输入以接收系统日志消息,请单击顶部菜单中的 System 下拉菜单。
现在,从下拉菜单中选择 Inputs。
从下拉菜单中选择Syslog UDP,然后单击Launch new input按钮。
将弹出“启动新输入:Syslog UDP”模式窗口。 输入以下信息(用您服务器的私有 IP 地址替换绑定地址):
- 标题:
syslog
- 港口:
8514
- 绑定地址:
graylog_private_IP
然后单击启动。
您现在应该在 Local inputs 部分中看到一个名为“syslog”的输入(并且它旁边应该有一个绿色框,上面写着“正在运行”),如下所示:
现在我们的 Graylog 服务器已准备好在端口 8514
上从您的服务器接收系统日志消息。 现在让我们配置您的服务器以将其系统日志消息发送到 Graylog。
配置 Rsyslog 以将 Syslogs 发送到 Graylog 服务器
在您的所有 客户端服务器 上,您希望将系统日志消息发送到 Graylog 的服务器上,执行以下步骤。
在 /etc/rsyslog.d 中创建一个 rsyslog 配置文件。 我们将调用我们的 90-graylog.conf
:
sudo vi /etc/rsyslog.d/90-graylog.conf
在此文件中,添加以下行以配置 rsyslog 以将 syslog 消息发送到 Graylog 服务器(将 graylog_private_IP
替换为 Graylog 服务器的私有 IP 地址):
/etc/rsyslog.d/90-graylog.conf
$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 界面。
查看您的 Graylog 源
在您喜欢的 Web 浏览器中,转到服务器公共 IP 地址的端口 9000
:
In a web browser:http://graylog_public_IP:9000/
单击顶部栏中的 Sources。 您将看到您配置 rsyslog 的所有服务器的列表。
源的主机名在左侧,Graylog 收到的消息数量在右侧。
搜索您的 Graylog 数据
让您的 Graylog 收集消息一段时间后,您将能够搜索消息。 例如,让我们搜索“sshd”以查看我们的服务器上正在发生什么样的 SSH 活动。 以下是我们的结果片段:
如您所见,我们的示例搜索结果显示了各种服务器的 sshd 日志,以及许多失败的 root 登录尝试。 您的结果可能会有所不同,但它可以帮助您识别许多问题,包括未经授权的用户如何尝试访问您的服务器。
除了所有来源的基本搜索功能外,您还可以搜索特定主机或特定时间范围内的日志。
在 Graylog 中搜索数据很有用,例如,如果您想在事件发生后查看一个或多个服务器的日志。 集中式日志记录可以更轻松地关联相关事件,因为您无需登录多个服务器即可查看已发生的所有事件。
有关搜索栏如何工作的更多信息,请查看官方文档:Graylog Searching
结论
现在您已经设置了 Graylog,请随意探索它提供的其他功能。 您可以将其他类型的日志发送到 Graylog,并设置提取器(或使用 logstash 等软件重新格式化日志)以使日志更具结构化和可搜索性。 您还可以考虑通过分离组件并添加冗余以提高性能和可用性来扩展您的 Graylog 环境。
祝你好运!