介绍
在本教程中,我们将涵盖如何在CentOS 7上安装Graylog v1.3.x(有时称为Graylog2)并配置它以在集中位置收集系统的syslogs。Graylog是一个强大的日志管理和分析工具,具有许多用例,从监控SSH登录和异常活动到调试应用程序。
可以使用Graylog来收集和监控各种各样的日志,但我们会将本教程的范围限制在syslog收集上。
关于 Graylog 组件
Graylog有四个主要成分:
- Graylog 服务器节点 : 作为接收和处理消息的工人,并与所有其他非服务器组件进行通信。 其性能为 CPU dependent
- Elasticsearch 节点 : 存储所有日志/消息。 其性能为 RAM 和磁盘 I/O dependent
- MongoDB : 存储元数据并不会经历太多 load
- Web 接口 : 用户界面
以下是 Graylog 组件的图表(请注意,这些消息是从其他服务器发送的):
本教程将实现一个非常基本的Graylog设置,所有组件都安装在同一个服务器上。
前提条件
本教程中描述的设置需要 CentOS 7 服务器,至少有 2 GB 的 RAM. 您还需要 root 或超级用户访问(步骤 1-4 中的 CentOS 7 初始服务器设置)。
如果您使用的是 RAM 少于 2 GB 的 VPS,您将无法启动所有 Graylog 组件。
让我们开始安装软件吧!
安装 MongoDB
安装 MongoDB 非常简单,快速,运行以下命令将 MongoDB 公共 GPG 键导入 rpm:
1sudo rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc
创建 MongoDB 源列表:
1echo '[mongodb-org-3.2]
2name=MongoDB Repository
3baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
4gpgcheck=1
5enabled=1' | sudo tee /etc/yum.repos.d/mongodb-org-3.2.repo
使用此命令安装 MongoDB 的最新稳定版本:
1sudo yum install -y mongodb-org
现在开始MongoDB:
1sudo systemctl restart mongod
MongoDB 应该现在启动并运行,让我们继续安装 Java。
安装Java
Elasticsearch 和 Logstash 需要 Java,所以我们现在会安装它。我们会安装最近的 Oracle Java 8 版本,因为这就是 Elasticsearch 推荐的。 但是,如果您选择使用 OpenJDK,它应该很好地工作。
转到您的主目录并下载Oracle Java 8(更新73,本文写作时最新的) JDK RPM,使用以下命令:
1wget --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 (如果您下载了不同的版本,请在这里更换文件名):
1sudo yum -y localinstall jdk-8u73-linux-x64.rpm
现在Java应该在/usr/java/jdk1.8.0_73/jre/bin/java
上安装,并从/usr/bin/java
上链接。
您可以删除您之前下载的档案文件:
1rm ~/jdk-8u*-linux-x64.rpm
现在Java已安装,让我们安装Elasticsearch。
安装 Elasticsearch
Graylog 1.x 仅适用于 Elasticsearch 2.0 之前的版本,因此我们将安装 Elasticsearch 1.7.x. Elasticsearch 可以通过添加 Elastic 的包源列表来与包管理器一起安装。
运行以下命令将 Elasticsearch 公共 GPG 键导入 rpm:
1sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
通过运行此命令为 Elasticsearch 创建一个新的 yum 存储文件:
1echo '[elasticsearch-1.7]
2name=Elasticsearch repository for 1.7.x packages
3baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
4gpgcheck=1
5gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
6enabled=1' | sudo tee /etc/yum.repos.d/elasticsearch.repo
使用此命令安装 Elasticsearch:
1sudo yum -y install elasticsearch
Elasticsearch 已安装,让我们编辑配置:
1sudo vi /etc/elasticsearch/elasticsearch.yml
查找指定的cluster.name
的部分,删除它,并用graylog-development
取代默认值,以便它看起来如下:
1[label elasticsearch.yml — 1 of 2]
2cluster.name: graylog-development
您将想要限制对您的 Elasticsearch 实例的外部访问(端口 9200),以便外部人员无法通过 HTTP API 读取您的数据或关闭您的 Elasticsearch 集群。
1[label elasticsearch.yml — 2 of 2]
2network.host: localhost
保存并退出elasticsearch.yml
。
现在开始 Elasticsearch:
1sudo systemctl restart elasticsearch
然后运行以下命令启动 Elasticsearch 启动:
1sudo systemctl enable elasticsearch
几分钟后,运行以下操作来测试 Elasticsearch 是否正常运行:
1curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
现在Elasticsearch正在运行,让我们安装Graylog服务器。
安装 Graylog 服务器
现在我们已经安装了其他必要的软件,让我们安装Graylog的服务器组件,‘graylog-server’。
首先,使用此命令将 Graylog RPM 包下载到您的系统:
1sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-1.3-repository-el7_latest.rpm
然后用这些命令安装graylog-server
包:
1sudo yum -y install graylog-server
安装 pwgen,我们将使用它来生成密码秘密密钥:
1sudo yum -y install epel-release
2sudo yum -y install pwgen
现在我们必须配置 admin 密码和秘密密钥. 密码秘密密钥配置在 server.conf 中,通过 password_secret
参数。 我们可以生成随机密钥并将其插入到 Graylog 配置中,使用以下两个命令:
1SECRET=$(pwgen -s 96 1)
2sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog/server/server.conf
通过创建所需密码的shasum
来分配 admin 密码,并将其分配到 Graylog 配置文件中的root_password_sha2
参数中。 使用以下命令创建所需密码的 shasum,用您自己的代替所突出的密码
:
1PASSWORD=$(echo -n password | sha256sum | awk '{print $1}')
2sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog/server/server.conf
现在,管理员密码已经设置,让我们打开Graylog配置来做一些更改:
1sudo vi /etc/graylog/server/server.conf
您应该看到password_secret
和root_password_sha2
因您在上面的步骤中运行的命令而具有随机字符串。
现在我们将配置rest_transport_uri
,这就是Graylog Web 接口将如何与服务器进行通信. 因为我们在一个服务器上安装所有组件,让我们将值设置为127.0.0.1
,或localhost
。
1[label /etc/graylog/server/server.conf — 1 of 4]
2rest_transport_uri = http://127.0.0.1:12900/
接下来,因为我们只有一个 Elasticsearch 碎片(在这个服务器上运行),我们会将 `elasticsearch_shards' 的值更改为 1:
1[label /etc/graylog/server/server.conf — 2 of 4]
2elasticsearch_shards = 1
接下来,将elasticsearch_cluster_name
的值更改为graylog-development
(与cluster.name
的Elasticsearch相同):
1[label /etc/graylog/server/server.conf — 3 of 4]
2elasticsearch_cluster_name = graylog-development
解析这两个行以发现使用unicast而不是multicast的Elasticsearch实例:
1[label /etc/graylog/server/server.conf — 4 of 4]
2elasticsearch_discovery_zen_ping_multicast_enabled = false
3elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
现在graylog-server
已配置并准备启动。
使用服务命令启动 Graylog 服务器:
1sudo systemctl start graylog-server
下一步是安装Graylog Web接口,现在就去做吧!
安装Graylog Web
使用此命令安装 Graylog Web:
1sudo yum -y install graylog-web
接下来,我们要配置 Web 接口的秘密密密钥,在 web.conf 中的 application.secret
参数. 我们将生成另一个密钥,就像我们在 Graylog 服务器配置中一样,并用 sed 插入,如下:
1SECRET=$(pwgen -s 96 1)
2sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /etc/graylog/web/web.conf
现在用这个命令打开 Web 界面配置文件:
1sudo vi /etc/graylog/web/web.conf
现在我们需要更新 Web 接口的配置,以指定 graylog2-server.uris
参数. 这是服务器 REST URI 的一个命令列表. 因为我们只有一个 Graylog 服务器节点,所以值应该与 Graylog 服务器配置中的 rest_listen_uri’ 相匹配(即
http://127.0.0.1:12900/`).
1[label /etc/graylog/web/web.conf excerpt]
2graylog2-server.uris="http://127.0.0.1:12900/"
Graylog Web 接口现在已配置。启动 Graylog Web 接口:
1sudo systemctl restart graylog-web
现在我们可以使用Graylog Web接口,现在就来做吧。
配置 Graylog 以接收 syslog 消息
登录到 Graylog Web 界面
在您最喜欢的 Web 浏览器中,前往服务器的公共 IP 地址的端口9000
:
1[secondary_label In a web browser:]
2http://graylog_public_IP:9000/
您应该看到登录屏幕. 输入admin
作为您的用户名和您之前设置的管理员密码。
一旦登录,你会看到这样的东西:
顶部的红色数字是一个通知. 如果你点击它,你会看到一个消息,说你有一个节点没有任何运行输入. 让我们添加一个输入来接收通过UDP的 syslog消息。
创建 Syslog UDP 输入
若要添加输入以接收 syslog 消息,请点击顶部菜单中的 ** System** 滚动键。
现在,从下滑菜单中,选择 Inputs 。
从下滑菜单中选择 Syslog UDP ,然后单击 ** 启动新输入** 按钮。
一个启动新输入: _Syslog UDP_
模式窗口将出现. 输入以下信息(在您的服务器的私人IP地址中替代绑定地址):
- 标题:
syslog
- 端口:
8514
- 链接地址:
graylog_private_IP
然后点击启动
。
您现在应该在本地输入
部分中看到一个名为syslog
的输入(并且它应该有一个绿色框,上面说运行
),如下:
现在,我们的Graylog服务器已经准备好从您的服务器接收8514
端口上的syslog消息,现在让我们将服务器配置为将其syslog消息发送到Graylog。
配置 Rsyslog 将 Syslogs 发送到 Graylog 服务器
在您所有客户端服务器上,您要向 Graylog 发送 syslog 消息的服务器上,请执行以下步骤。
在 /etc/rsyslog.d 中创建一个 rsyslog 配置文件,我们将称呼我们的 90-graylog.conf
:
1sudo vi /etc/rsyslog.d/90-graylog.conf
在此文件中,添加以下行来配置 rsyslog 以将 syslog 消息发送到您的 Graylog 服务器(以您的 Graylog 服务器的私人 IP 地址代替 graylog_private_IP
):
1[label /etc/rsyslog.d/90-graylog.conf]
2$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
3*.* @graylog_private_IP:8514;GRAYLOGRFC5424
保存和终止. 此文件将从现在起作为您的 rsyslog 配置的一部分加载. 现在您需要重新启动 rsyslog 以使您的更改生效。
1sudo systemctl restart rsyslog
在您想要监控的所有服务器上完成配置 rsyslog 后,请返回 Graylog Web 界面。
查看您的 Graylog 来源
在您最喜欢的 Web 浏览器中,前往服务器的公共 IP 地址的端口9000
:
1[secondary_label In a web browser:]
2http://graylog_public_IP:9000/
点击顶部栏中的 ** 来源** ,您将看到您配置 rsyslog 的所有服务器的列表。
来源的主机名在左边,Graylog接收的消息数量在右边。
搜索您的 Graylog 数据
允许您的Graylog收集消息一段时间后,您将能够搜索这些消息,例如,让我们搜索sshd
,看看我们的服务器上发生了什么类型的SSH活动。
正如您所看到的,我们的示例搜索结果显示了各种服务器的 sshd 日志,以及许多失败的 root 登录尝试. 您的结果可能会有所不同,但可以帮助您识别许多问题,包括未经授权的用户试图访问您的服务器。
除了所有源的基本搜索功能外,您还可以搜索特定主机的日志或特定时间框架。
例如,如果您想在发生事件后查看服务器或多个服务器的日志,则 Graylog 中的数据搜索非常有用。
有关搜索栏如何工作的更多信息,请参阅官方文档: Graylog Searching
结论
现在你已经设置了Graylog,请自由探索其提供的其他功能。你可以将其他类型的日志发送到Graylog,并设置提取器(或使用软件如logstash的改编日志),以使日志更加结构化和可搜索。
好运!