介绍
在本教程中,我们将介绍Graylog2(v0.20.2)的安装,并将其配置为在集中位置收集我们系统的syslog。 Graylog2是一个强大的日志管理和分析工具,具有许多用例,从监视SSH登录和异常活动到调试应用程序。 它基于Elasticsearch,Java,MongoDB和Scala。
注:本教程是为Graylog2过时的版本。 新版本可以在这里找到: 如何在Ubuntu 14.04安装Graylog 1.x中 。
可以使用Graylog2收集和监视大量的日志,但我们将本教程的范围限制为系统日志收集。 此外,因为我们演示了Graylog2的基础知识,我们将在单个服务器上安装所有组件。
关于Graylog2组件
Graylog2有四个主要组件:
- Graylog2服务器节点 :用作接收和处理信息,并与所有其他非服务器组件通信的工人。 它的性能是CPU依赖
- Elasticsearch节点 :存储所有日志/消息。 其性能取决于RAM和磁盘I / O
- MongoDB的 :存储元数据,并不会遇到大的负荷
- Web界面 :用户界面
下面是Graylog2组件的图(注意消息是从其他服务器发送的):
对于非常基本的设置,所有组件都可以安装在同一台服务器上。 对于更大的生产设置,设置一些高可用性功能是明智的,因为如果服务器,Elasticsearch或MongoDB组件遇到中断,Graylog2将不会收集中断期间生成的消息。
先决条件
本教程中描述的设置需要一个至少有2GB RAM的Ubuntu 14.04 VPS。 您还需要root访问权限(步骤的1-4 初始服务器设置与Ubuntu 14.04 )。
如果您使用的内存小于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
现在,我们必须配置管理员密码和密钥。 密码密钥被配置在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
所需的密码,并将其分配给root_password_sha2
的Graylog2配置文件中的参数。 使用以下命令创建所需密码的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 init脚本。 复制graylog2ctl
到/etc/init.d:
sudo cp /opt/graylog2-server/bin/graylog2ctl /etc/init.d/graylog2
更新启动脚本把Graylog2日志中/var/log
,并寻找在Graylog2服务器JAR文件/opt/graylog2-server
运行以下两个sed命令:
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 Interface
我们将使用以下命令在/ 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界面的密钥,在application.secret
在graylog2-网络interface.conf参数。 我们将像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服务器节点,该值应该匹配的rest_listen_uri
在Graylog2服务器配置(即“ 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 Web界面:
sudo service graylog2-web start
现在我们可以使用Graylog2的web界面。 让我们现在做吧。
配置Graylog2以接收syslog消息
登录到Graylog2 Web界面
在您最喜欢的浏览器中,转到您的VPS的公共IP地址的端口9000:
http://gl2_public_IP:9000/
您应该会看到登录屏幕。 输入“admin”作为您的用户名,密码是您之前设置的管理员密码。
登录后,您将看到以下内容:
闪烁的红色“1”是通知。 如果你点击它,你会看到一个消息,说你有一个节点,而任何正在运行的投入 。 让我们添加一个输入来接收通过UDP的syslog消息。
创建Syslog UDP输入
要添加的输入接收系统日志消息,请点击输入 系统菜单的右侧。
现在,从下拉菜单中选择系统日志UDP,然后单击启动新的输入 。
A“启动一个新的输入系统日志UDP”窗口会弹出。 输入以下信息:
- 标题:syslog
- 端口:514
- 绑定地址:
gl2_private_IP
然后单击启动 。
您现在应该看到一个名为“系统日志”输入在运行本地输入部分 (它应该有一个绿色的盒子,说是在“跑”),像这样:
现在我们的Graylog2服务器准备好从您的服务器接收syslog消息。 让我们配置我们的服务器以将它们的syslog消息发送到Graylog2。
将rsyslog配置为发送到您的Graylog2服务器
在要将syslog消息发送到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,"%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/
在顶栏点击来源 。 您将看到您配置了rsyslog的所有服务器的列表。 这里是一个例子它可能是什么样子:
源的主机名位于左侧,右侧由Graylog2接收的消息数。
搜索您的Graylog2数据
在让Graylog2收集邮件一段时间后,您将能够搜索邮件。 例如,让我们搜索“sshd”,看看我们的服务器上正在发生什么类型的SSH活动。 这里是我们的结果的一个片段:
如您所见,我们的示例搜索结果显示了各种服务器的sshd日志,以及大量失败的root登录尝试。 您的结果可能会有所不同,但它可以帮助您识别许多问题,包括未授权用户尝试访问您的服务器的方式。
除了所有来源的基本搜索功能之外,您还可以搜索特定主机的日志,或在特定时间范围内。
搜索Graylog2中的数据非常有用,例如,如果您想在事件发生后查看一个服务器或多个服务器的日志。 集中式日志记录可以更容易地关联相关事件,因为您不需要登录多个服务器即可查看发生的所有事件。
有关搜索栏如何工作的更多信息,请查看官方文档: 搜索栏的解释
结论
现在您已经设置了Graylog2,请随时浏览它提供的其他功能。 您可以将其他类型的日志发送到Graylog2,并设置提取器(或使用软件如logstash重新格式化日志),以使日志更结构化和可搜索。 您还可以通过分离组件并添加冗余来提高性能和可用性,从而扩展您的Graylog2环境。
祝你好运!