简介
在本教程中,我们将介绍如何安装 Graylog2(v0.20.2),并配置它以在一个集中的位置收集我们系统的syslog。Graylog2 是一个功能强大的日志管理和分析工具,有许多用例,从监控 SSH 登录和异常活动到调试应用程序。它基于 Elasticsearch、Java、MongoDB 和 Scala。
可以使用 Graylog2 收集和监控各种日志,但我们将把本教程的范围限制在 syslog 收集上。另外,因为我们正在演示 Graylog2 的基础知识,所以我们将在单个服务器上安装所有组件。
关于 Graylog2 组件
Graylog2 有四个主要组件:
- Graylog2 服务器节点:作为接收和处理消息的工作节点,并与所有其他非服务器组件通信。其性能取决于 CPU
- Elasticsearch 节点:存储所有日志/消息。其性能取决于 RAM 和磁盘 I/O
- MongoDB:存储元数据,负载不大
- Web 界面:用户界面
以下是 Graylog2 组件的图示(注意消息是从其他服务器发送的):
!Basic Graylog2 Setup
对于非常基本的设置,所有组件都可以安装在同一台服务器上。对于更大的生产设置,最好设置一些高可用性功能,因为如果服务器、Elasticsearch 或 MongoDB 组件遇到故障,Graylog2 将无法收集在故障期间生成的消息。
先决条件
本教程中描述的设置需要一个至少有 2GB RAM 的 Ubuntu 14.04 VPS。您还需要 root 访问权限(Ubuntu 14.04 的初始服务器设置的步骤 1-4)。
如果您使用的 VPS 内存少于 2GB,您将无法启动所有 Graylog2 组件。
让我们开始安装软件!
安装 MongoDB
MongoDB 的安装简单快捷。运行以下命令将 MongoDB 的公共 GPG 密钥导入到 apt:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
创建 MongoDB 源列表:
echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
更新您的 apt 软件包数据库:
sudo apt-get update
使用以下命令安装 MongoDB 的最新稳定版本:
sudo apt-get install mongodb-org
MongoDB 现在应该已经启动。让我们继续安装 Java 7。
安装 Java 7
Elasticsearch 需要 Java 7,所以我们现在将安装它。我们将安装 Oracle Java 7,因为这是 elasticsearch.org 上推荐的。但如果您决定选择 OpenJDK,它也应该可以正常工作。
将 Oracle Java PPA 添加到 apt:
sudo add-apt-repository ppa:webupd8team/java
更新您的 apt 软件包数据库:
sudo apt-get update
使用以下命令安装 Oracle Java 7 的最新稳定版本(并接受弹出的许可协议):
sudo apt-get install oracle-java7-installer
现在 Java 7 已安装,让我们安装 Elasticsearch。
安装 Elasticsearch
Graylog2 v0.20.2 需要 Elasticsearch v.0.90.10。使用以下命令下载并安装它:
cd ~; wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.10.deb sudo dpkg -i elasticsearch-0.90.10.deb
我们需要更改 Elasticsearch 的 cluster.name 设置。打开 Elasticsearch 配置文件:
sudo vi /etc/elasticsearch/elasticsearch.yml
找到指定 cluster.name
的部分。取消注释,并将默认值替换为 “graylog2”,使其如下所示:
cluster.name: graylog2
您还需要限制外部访问您的 Elasticsearch 实例(端口 9200),以防止外部人员通过 HTTP API 读取您的数据或关闭您的 Elasticsearch 集群。找到指定 network.bind_host 的行,并取消注释,使其如下所示:
network.bind_host: localhost
然后在文件的某处添加以下行,以禁用动态脚本:
script.disable_dynamic: true
保存并退出。接下来,重新启动 Elasticsearch 以使我们的更改生效:
sudo service elasticsearch restart
几秒钟后,运行以下命令测试 Elasticsearch 是否正常运行:
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
现在 Elasticsearch 已经启动运行,让我们安装 Graylog2 服务器。
安装 Graylog2 服务器
现在我们已经安装了其他所需的软件,让我们来安装 Graylog2 服务器。我们将在 /opt 目录下安装 Graylog2 服务器 v0.20.2。首先,使用以下命令将 Graylog2 存档文件下载到 /opt 目录:
cd /opt; sudo wget https://github.com/Graylog2/graylog2-server/releases/download/0.20.2/graylog2-server-0.20.2.tgz
然后解压缩存档:
sudo tar xvf graylog2-server-0.20.2.tgz
让我们创建一个符号链接指向新创建的目录,以简化目录名称:
sudo ln -s graylog2-server-0.20.2 graylog2-server
将示例配置文件复制到正确的位置,在 /etc 目录下:
sudo cp /opt/graylog2-server/graylog2.conf.example /etc/graylog2.conf
安装 pwgen,我们将使用它来生成密码密钥:
sudo apt-get install pwgen
现在我们必须配置 admin 密码和密钥。密码密钥在 graylog2.conf 中通过 password_secret
参数进行配置。我们可以使用以下两个命令生成一个随机密钥,并将其插入到 Graylog2 配置中:
SECRET=$(pwgen -s 96 1) sudo -E sed -i -e 's/password_secret =.*/password_secret = '$SECRET'/' /etc/graylog2.conf
admin 密码是通过创建所需密码的 shasum
,并将其分配给 Graylog2 配置文件中的 root_password_sha2
参数来分配的。使用以下命令创建所需密码的 shasum,将其中的突出显示的 “password” 替换为您自己的密码。sed 命令会将其插入到 Graylog2 配置中:
PASSWORD=$(echo -n password | shasum -a 256 | awk '{print $1}')
sudo -E sed -i -e 's/root_password_sha2 =.*/root_password_sha2 = '$PASSWORD'/' /etc/graylog2.conf
现在管理员密码已设置好,让我们打开 Graylog2 配置文件进行一些更改:
sudo vi /etc/graylog2.conf
您应该看到 password_secret
和 root_password_sha2
有随机字符串,因为您在上面的步骤中运行了命令。现在我们将配置 rest_transport_uri
,这是 Graylog2 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
保存并退出。现在我们的 Graylog2 服务器已配置并准备好启动。
可选:如果您想测试一下,运行以下命令:
sudo java -jar /opt/graylog2-server/graylog2-server.jar --debug
您应该会看到大量输出。一旦看到类似以下行的输出,您将知道您的 Graylog2 服务器已正确配置:
2014-06-06 14:16:13,420 INFO : org.graylog2.Core - Started REST API at <http://127.0.0.1:12900/> 2014-06-06 14:16:13,421 INFO : org.graylog2.Main - Graylog2 up and running.
按下 CTRL-C
来终止测试并返回到 shell。
现在让我们安装 Graylog2 启动脚本。将 graylog2ctl
复制到 /etc/init.d:
sudo cp /opt/graylog2-server/bin/graylog2ctl /etc/init.d/graylog2
通过运行以下两个 sed 命令来更新启动脚本,将 Graylog2 日志放在 /var/log
中,并在 /opt/graylog2-server
中查找 Graylog2 服务器 JAR 文件:
sudo sed -i -e 's/GRAYLOG2_SERVER_JAR=\${GRAYLOG2_SERVER_JAR:=graylog2-server.jar}/GRAYLOG2_SERVER_JAR=\${GRAYLOG2_SERVER_JAR:=\/opt\/graylog2-server\/graylog2-server.jar}/' /etc/init.d/graylog2
sudo sed -i -e 's/LOG_FILE=\${LOG_FILE:=log\/graylog2-server.log}/LOG_FILE=\${LOG_FILE:=\/var\/log\/graylog2-server.log}/' /etc/init.d/graylog2
接下来,安装启动脚本:
sudo update-rc.d graylog2 defaults
现在我们可以使用 service 命令启动 Graylog2 服务器:
sudo service graylog2 start
下一步是安装 Graylog2 web 接口。让我们现在就来做吧!
安装 Graylog2 Web 接口
我们将使用以下命令在 /opt 目录中下载并安装 Graylog2 v.0.20.2 web 接口:
cd /opt; sudo wget https://github.com/Graylog2/graylog2-web-interface/releases/download/0.20.2/graylog2-web-interface-0.20.2.tgz sudo tar xvf graylog2-web-interface-0.20.2.tgz
让我们创建一个符号链接指向新创建的目录,以简化目录名称:
sudo ln -s graylog2-web-interface-0.20.2 graylog2-web-interface
接下来,我们需要配置 web 接口的密钥,即 graylog2-web-interface.conf 中的 application.secret
参数。我们将生成另一个密钥,就像我们在 Graylog2 服务器配置中所做的那样,并使用 sed 插入它,如下所示:
SECRET=$(pwgen -s 96 1) sudo -E sed -i -e 's/application\.secret=""/application\.secret="'$SECRET'"/' /opt/graylog2-web-interface/conf/graylog2-web-interface.conf
现在打开 web 接口配置文件,使用以下命令:
sudo vi /opt/graylog2-web-interface/conf/graylog2-web-interface.conf
现在我们需要更新 web 接口的配置,以指定 graylog2-server.uris
参数。这是服务器 REST URI 的逗号分隔列表。由于我们只有一个 Graylog2 服务器节点,该值应与 Graylog2 服务器配置中的 rest_listen_uri
匹配(即 “http://127.0.0.1:12900/”)。
graylog2-server.uris="<span class="highlight">http://127.0.0.1:12900/</span>"
Graylog2 web 接口现在已配置。让我们启动它来进行测试:
sudo /opt/graylog2-web-interface-0.20.2/bin/graylog2-web-interface
当您看到以下两行时,您将知道它已正确启动:
[info] play - Application started (Prod) [info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
按下 CTRL-C
杀死 web 接口。现在让我们安装一个启动脚本。您可以创建自己的启动脚本,或者下载我为本教程创建的启动脚本。要将脚本下载到您的主目录,请使用以下命令:
cd ~; wget https://assets.digitalocean.com/articles/graylog2/graylog2-web
接下来,您需要将其复制到 /etc/init.d
,并将其所有权更改为 root
,权限更改为 755
:
sudo cp ~/graylog2-web /etc/init.d/ sudo chown root:root /etc/init.d/graylog2-web sudo chmod 755 /etc/init.d/graylog2-web
现在您可以使用以下命令安装 web 接口初始化脚本:
sudo update-rc.d graylog2-web defaults
启动 Graylog2 web 接口:
sudo service graylog2-web start
现在我们可以使用 Graylog2 web 接口。让我们现在这样做。
配置 Graylog2 接收 syslog 消息
登录到 Graylog2 Web 接口
在您喜欢的浏览器中,转到您的 VPS 的公共 IP 地址的端口 9000:
http://<span class="highlight">gl2_public_IP</span>:9000/
您应该看到一个登录屏幕。输入 “admin” 作为您的用户名和您之前设置的管理员密码。
登录后,您将看到类似以下内容:
!Graylog2 仪表板
闪烁的红色 “1” 是一个通知。如果单击它,您将看到一条消息,指出您有一个没有运行 inputs 的节点。让我们现在添加一个输入以接收 UDP 上的 syslog 消息。
创建 Syslog UDP 输入
要添加输入以接收 syslog 消息,请在右侧的 System 菜单中单击 Inputs。
现在,从下拉菜单中选择 Syslog UDP,然后单击 Launch new input。
将弹出一个 “启动新输入 Syslog UDP” 窗口。输入以下信息:
- 标题:syslog
- 端口:514
- 绑定地址:
gl2_private_IP
然后单击 Launch。
现在您应该在 Running local inputs section 中看到一个名为 “syslog” 的输入(它应该有一个绿色框,其中写着 “running”),如下所示:
!Graylog syslog 输入
现在我们的 Graylog2 服务器已准备好接收来自您的服务器的 syslog 消息。现在让我们配置我们的服务器,以将其 syslog 消息发送到 Graylog2。
配置 rsyslog 发送到您的 Graylog2 服务器
在您希望将系统日志消息发送到 Graylog2 的所有服务器上,执行以下步骤。
在 /etc/rsyslog.d 中创建一个 rsyslog 配置文件。我们将称其为 90-graylog2.conf
:
sudo vi /etc/rsyslog.d/90-graylog2.conf
在该文件中,添加以下行以配置 rsyslog 将系统日志消息发送到您的 Graylog2 服务器(将 gl2_private_IP
替换为您的 Graylog2 服务器的私有 IP 地址):
$template GRAYLOGRFC5424,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msg%\n"
*.* @gl2_private_IP:514;GRAYLOGRFC5424
保存并退出。此文件将作为您的 rsyslog 配置的一部分加载。现在您需要重新启动 rsyslog 以使更改生效。
sudo service rsyslog restart
完成对要监视的所有服务器上的 rsyslog 的配置后,让我们返回到 Graylog2 web 界面。
查看您的 Graylog2 源
在您喜欢的浏览器中,转到您的 VPS 的公共 IP 地址的 9000 端口:
http://gl2_public_IP:9000/
点击顶部的 Sources。您将看到您配置了 rsyslog 的所有服务器的列表。以下是可能的示例:
!Graylog2 Sources
源的主机名在左侧,Graylog2 收到的消息数量在右侧。
搜索您的 Graylog2 数据
在让您的 Graylog2 收集一段时间的消息后,您将能够搜索这些消息。例如,让我们搜索 “sshd”,以查看我们的服务器上发生了什么样的 SSH 活动。以下是我们结果的一部分:
!Graylog2 Example Search
如您所见,我们的示例搜索结果显示了各个服务器的 sshd 日志,以及大量失败的 root 登录尝试。您的结果可能会有所不同,但它可以帮助您识别许多问题,包括未经授权的用户如何尝试访问您的服务器。
除了在所有源上的基本搜索功能之外,您还可以搜索特定主机的日志,或在特定时间范围内进行搜索。
在 Graylog2 中搜索数据是有用的,例如,如果您想在发生事故后查看服务器或多个服务器的日志。集中式日志记录使得更容易关联相关事件,因为您无需登录多个服务器即可查看发生的所有事件。
有关搜索栏如何工作的更多信息,请查看官方文档:搜索栏解释
结论
现在您已经设置了 Graylog2,可以随意探索其提供的其他功能。您可以将其他类型的日志发送到 Graylog2,并设置提取器(或使用诸如 logstash 等软件重新格式化日志)以使日志更有结构和可搜索性。您还可以考虑通过分离组件并添加冗余性来扩展您的 Graylog2 环境,以提高性能和可用性。
祝您好运!