如何在Ubuntu14.04上安装Graylog2并集中日志

来自菜鸟教程
跳转至:导航、​搜索

介绍

在本教程中,我们将介绍 Graylog2 (v0.20.2) 的安装,并将其配置为在一个集中位置收集我们系统的 syslog。 Graylog2 是一个强大的日志管理和分析工具,它有许多用例,从监视 SSH 登录和异常活动到调试应用程序。 它基于 Elasticsearch、Java、MongoDB 和 Scala。

注意: 本教程适用于Graylog2的过时版本。 此处提供了一个新版本:如何在 Ubuntu 14.04 上安装 Graylog 1.x。


可以使用 Graylog2 收集和监控大量日志,但我们将本教程的范围限制为 syslog 收集。 此外,因为我们正在演示 Graylog2 的基础知识,所以我们将在单个服务器上安装所有组件。

关于 Graylog2 组件

Graylog2 有四个主要组件:

  • Graylog2 服务器节点:作为一个worker,接收和处理消息,并与所有其他非服务器组件进行通信。 它的性能取决于 CPU
  • Elasticsearch 节点:存储所有日志/消息。 它的性能取决于 RAM 和磁盘 I/O
  • MongoDB:存储元数据,负载不大
  • Web界面:用户界面

这是 Graylog2 组件的图表(请注意,消息是从您的其他服务器发送的):

对于非常基本的设置,所有组件都可以安装在同一台服务器上。 对于更大的生产设置,明智的做法是设置一些高可用性功能,因为如果服务器、Elasticsearch 或 MongoDB 组件遇到中断,Graylog2 将不会收集中断期间生成的消息。

先决条件

本教程中描述的设置需要具有至少 2GB RAM 的 Ubuntu 14.04 VPS。 您还需要 root 访问权限(Initial Server Setup with Ubuntu 14.04 的步骤 1-4)。

如果您使用 RAM 少于 2GB 的 VPS,您将无法启动所有 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 读取您的数据或关闭您的 Elasticseach 集群。 找到指定 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 Server 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,用您自己的替换突出显示的“密码”。 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_secretroot_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

更新启动脚本以将 Graylog2 日志放入 /var/log 并通过运行以下两个 sed 命令在 /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 网页界面

我们将使用以下命令在 /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=“  http://127.0.0.1:12900/  ”

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 网页界面:

sudo service graylog2-web start

现在我们可以使用 Graylog2 Web 界面了。 现在让我们这样做。

配置 Graylog2 以接收系统日志消息

登录 Graylog2 Web 界面

在您喜欢的浏览器中,转到您的 VPS 公网 IP 地址的 9000 端口:

http:// gl2_public_IP :9000/

您应该会看到一个登录屏幕。 输入“admin”作为您的用户名,密码输入您之前设置的管理员密码。

登录后,您将看到类似以下内容:

闪烁的红色“1”是一个通知。 如果单击它,您将看到一条消息,说明您有一个节点,但没有任何正在运行的 inputs。 现在让我们添加一个输入以通过 UDP 接收系统日志消息。

创建 Syslog UDP 输入

要添加输入以接收 syslog 消息,请单击右侧 System 菜单中的 Inputs

现在,从下拉菜单中选择 Syslog UDP 并单击 Launch new input

将弹出“启动新输入 Syslog UDP”窗口。 输入以下信息:

  • 标题:系统日志
  • 端口:514
  • 绑定地址:gl2_private_IP

然后单击启动

您现在应该在 Running local inputs 部分 中看到一个名为“syslog”的输入(它应该有一个绿色框,上面写着“running”),如下所示:

现在我们的 Graylog2 服务器已准备好从您的服务器接收系统日志消息。 现在让我们配置我们的服务器以将其系统日志消息发送到 Graylog2。

配置 rsyslog 以发送到您的 Graylog2 服务器

在要向 Graylog2 发送系统日志消息的所有服务器上,执行以下步骤。

在 /etc/rsyslog.d 中创建一个 rsyslog 配置文件。 我们将调用我们的 90-graylog2.conf

sudo vi /etc/rsyslog.d/90-graylog2.conf

在此文件中,添加以下行以配置 rsyslog 以将 syslog 消息发送到 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 收到的消息数量在右侧。

搜索 Graylog2 数据

让您的 Graylog2 收集消息一段时间后,您将能够搜索消息。 例如,让我们搜索“sshd”以查看我们的服务器上正在发生什么样的 SSH 活动。 以下是我们的结果片段:

如您所见,我们的示例搜索结果显示了各种服务器的 sshd 日志,以及许多失败的 root 登录尝试。 您的结果可能会有所不同,但它可以帮助您识别许多问题,包括未经授权的用户如何尝试访问您的服务器。

除了所有来源的基本搜索功能外,您还可以搜索特定主机或特定时间范围内的日志。

在 Graylog2 中搜索数据很有用,例如,如果您想在事件发生后查看一个或多个服务器的日志。 集中式日志记录可以更轻松地关联相关事件,因为您无需登录多个服务器即可查看已发生的所有事件。

有关搜索栏如何工作的更多信息,请查看官方文档:搜索栏解释

结论

现在您已经设置了 Graylog2,请随意探索它提供的其他功能。 您可以将其他类型的日志发送到 Graylog2,并设置提取器(或使用 logstash 等软件重新格式化日志)以使日志更具结构化和可搜索性。 您还可以考虑通过分离组件和添加冗余来扩展 Graylog2 环境以提高性能和可用性。

祝你好运!

米切尔·阿尼卡斯