ELK-Stack部署指南

网友投稿 818 2022-05-29

参考文章

elastic官网:https://www.elastic.co

Elasticsearch中文社区:http://elasticsearch.cn/

部署安装filebeat:https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04

Topbeat:https://www.digitalocean.com/community/tutorials/how-to-gather-infrastructure-metrics-with-topbeat-and-elk-on-ubuntu-14-04

Packetbeat:https://www.digitalocean.com/community/tutorials/how-to-gather-infrastructure-metrics-with-packetbeat-and-elk-on-ubuntu-16-04

最佳实践:http://udn.yyuap.com/doc/logstash-best-practice-cn/output/elasticsearch.html

架构设计

日志转发收集软件:

Filebeat: 将syslog等日志发送到Logstash的客户端服务器上,作为日志传送代理,利用lumberjack 工具网络协议与Logstash进行通信。

Topbeat: 将CPU,内存,进程活动和系统负载等服务器数据发送到Logstash实例。当与ELK堆栈(Elasticsearch,Logstash和Kibana)一起使用时,Topbeat可以用作其他系统度量可视化工具(如Prometheus或Statsd)的替代选项。

Packetbeat: 可以运行在应用服务器上或者独自的服务器。当运行在独自服务器上时,需要从交换机的镜像端口或者窃听设备上获取网络流量。

应用程序等产生的日志直接推送至日志服务器中,经过logstash的处理最终推送至elasticsearch中,在kibana上进行展示,并通过Nginx限制用户访问。可以在logstash的Filter上定制解析规则和报警规则,定时将不可读日志文件解析为可读的json文件进行处理,当日志有严重的错误时可通过logstash的Output定制邮件模板进行报警。

安全问题:所有服务尽可能只对内网ip暴露(通过防火墙实现),减少对外暴露的服务,并且以低权限账户运行。跨节点的服务(如filebeat,topbeat,packetbeat等)连接一律采用SSL双向认证的方案,提高安全性。

准备环境

日志收集服务器端如下,并准备将要收集日志的其他服务器。

操作系统:Ubuntu 14.04

RAM:4GB

CPU:2

安装java8

将Oracle Java PPA添加到apt中:

sudo add-apt-repository -y ppa:webupd8team/java

更新apt包数据库:

sudo apt-get update

使用此命令安装最新的稳定版本的Oracle Java 8(并接受弹出的许可协议):

sudo apt-get -y install oracle-java8-installer

现在安装了Java 8,我们来安装ElasticSearch。

安装Elasticsearch

Elasticsearch可以通过添加Elastic的包源列表与包管理器一起安装。

运行以下命令将Elasticsearch公共GPG密钥导入到apt中:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

创建Elasticsearch源列表:

echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

更新apt包数据库:

sudo apt-get update

使用此命令安装Elasticsearch:

sudo apt-get -y install elasticsearch

Elasticsearch现已安装。我们来编辑配置:

sudo vi /etc/elasticsearch/elasticsearch.yml

您将要限制对Elasticsearch实例(端口9200)的外部访问,因此外部人员无法通过HTTP API读取数据或关闭Elasticsearch集群。找到指定network.host,取消注释它并将其值替换为“localhost”的行,如下所示:

elasticsearch.yml摘录(更新)

network.host: localhost

保存并退出elasticsearch.yml。

现在启动elasticsearch:

sudo service elasticsearch restart

然后在启动时运行以下命令启动Elasticsearch:

sudo update-rc.d elasticsearch defaults 95 10

现在Elasticsearch正在运行,我们来安装Kibana。

安装Kibana

Kibana可以通过添加Elastic的包源列表来安装包管理器。

创建Kibana源列表:

echo "deb http://packages.elastic.co/kibana/4.4/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.4.x.list

更新apt包数据库:

sudo apt-get update

使用此命令安装Kibana:

sudo apt-get -y install kibana

Kibana现已安装,打开Kibana配置文件以进行编辑:

sudo vi /opt/kibana/config/kibana.yml

在Kibana配置文件中,找到指定server.host并将IP地址(默认为“0.0.0.0”)替换为“localhost”的行:

kibana.yml摘录(更新)

server.host: "localhost"

保存并退出。这个设置使得Kibana只能由本地主机访问。我们将使用Nginx反向代理来允许外部访问。

现在启用Kibana服务,并启动它:

sudo update-rc.d kibana defaults 96 9

sudo service kibana start

在使用Kibana Web界面之前,我们必须设置一个反向代理。现在,我们来做Nginx。

安装Nginx

因为我们配置了Kibana来监听localhost,所以我们必须设置一个反向代理来允许外部访问它。为此,我们将使用Nginx。

注意:如果您已经有要使用的Nginx实例,请随意使用。只要确保配置Kibana所以它是由你的Nginx服务器可达(你可能要更改的host值,在/opt/kibana/config/kibana.yml,你Kibana服务器的专用IP地址或主机名)。另外,建议您启用SSL / TLS。

使用apt来安装Nginx和Apache2-utils:

sudo apt-get install nginx apache2-utils

使用htpasswd创建一个名为“kibanaadmin”的管理员用户(您应该使用其他名称),可以访问Kibana Web界面:

sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

在提示符下输入密码。记住这个登录,你将需要它来访问Kibana Web界面。

现在打开您喜欢的编辑器中的Nginx默认服务器块。我们将使用vi:

sudo vi /etc/nginx/sites-available/default

删除文件的内容,并将以下代码块粘贴到文件中。请务必更新server_name以符合您服务器的名称:

/ etc / nginx / sites-available / default

server {

listen 80;

server_name example.com;

auth_basic "Restricted Access";

auth_basic_user_file /etc/nginx/htpasswd.users;

location / {

proxy_pass http://localhost:5601;

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection 'upgrade';

proxy_set_header Host $host;

proxy_cache_bypass $http_upgrade;

}

}

保存并退出。这将Nginx配置为将您的服务器的HTTP流量指向正在侦听的Kibana应用程序localhost:5601。此外,Nginx将使用htpasswd.users我们之前创建的文件,并需要基本身份验证。

现在重新启动Nginx,使我们的更改生效:

sudo service nginx restart

Kibana现在可通过您的FQDN或ELK服务器的公共IP地址访问,即http:// elk \ _server \ _public \ _ip /。如果您在网络浏览器中进入“kibanaadmin”凭据,您应该会看到一个Kibana欢迎页面,它将要求您配置索引模式。我们稍后再回到安装所有其他组件之后。

安装Logstash

Logstash软件包可以从与Elasticsearch相同的存储库中获得,我们已经安装了该公钥,因此我们来创建Logstash源代码列表:

echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash-2.2.x.list

更新apt包数据库:

sudo apt-get update

使用此命令安装Logstash:

sudo apt-get install logstash

已安装Logstash,但尚未配置。

生成SSL证书

由于我们将使用Filebeat将客户端服务器中的日志发送到我们的ELK服务器,因此我们需要创建SSL证书和密钥对。Filebeat使用证书来验证ELK Server的身份。创建使用以下命令存储证书和私钥的目录:

sudo mkdir -p /etc/pki/tls/certs

sudo mkdir /etc/pki/tls/private

现在您有两个生成SSL证书的选项。如果您有DNS设置,将允许您的客户端服务器解析ELK服务器的IP地址,请使用选项2。否则,选项1将允许您使用IP地址。

选项1:IP地址

如果您没有DNS设置,将允许您收集日志的服务器来解析您的ELK服务器的IP地址,则必须将ELK Server的私有IP地址添加到subjectAltName(SAN)字段我们即将生成的SSL证书。为此,请打开OpenSSL配置文件:

sudo vi /etc/ssl/openssl.cnf

查找[ v3_ca ]文件中的部分,并在其下添加此行(用ELK Server的私有IP地址替换):

openssl.cnf摘录(更新)

subjectAltName = IP: ELK_server_private_IP

保存并退出。

现在使用以下命令在适当的位置(/ etc / pki / tls /)生成SSL证书和私钥:

cd /etc/pki/tls

sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

该logstash-forwarder.crt文件将被复制到所有将日志发送到Logstash服务器,但我们会做到这一点稍晚。我们来完成我们的Logstash配置。如果您使用此选项,请跳过选项2并继续进行配置Logstash。

选项2:FQDN(DNS)

如果您使用专有网络进行DNS设置,则应创建一个包含ELK Server专用IP地址的A记录,该域名将在下一个命令中使用,以生成SSL证书。或者,您可以使用指向服务器的公共IP地址的记录。只需确保您的服务器(您将要收集的服务器记录的)将能够将域名解析到您的ELK服务器。

现在,使用以下命令(在ELK服务器的FQDN中替换),在适当的位置(/ etc / pki / tls / ...)中生成SSL证书和私钥:

cd /etc/pki/tls; sudo openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

该logstash-forwarder.crt文件将被复制到所有将日志发送到Logstash服务器,但我们会做到这一点稍晚。我们来完成我们的Logstash配置。

配置Logstash

Logstash配置文件采用JSON格式,驻留在/etc/logstash/conf.d中。配置由三部分组成:输入,滤波和输出。

我们来创建一个配置文件,02-beats-input.conf并设置我们的“filebeat”输入:

sudo vi /etc/logstash/conf.d/02-beats-input.conf

插入以下输入配置:

02-beats-input.conf

input {

beats {

port => 5044

ssl => true

ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"

ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"

}

}

保存并退出。这指定了一个beats在tcp端口上侦听的输入,它将5044使用我们之前创建的SSL证书和私钥。

现在我们创建一个调用的配置文件10-syslog-filter.conf,在这里我们将添加一个syslog消息的过滤器:

sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

插入以下syslog 过滤器配置:

10-syslog-filter.conf

filter {

if [type] == "syslog" {

grok {

match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }

add_field => [ "received_at", "%{@timestamp}" ]

add_field => [ "received_from", "%{host}" ]

}

syslog_pri { }

date {

match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]

}

}

}

保存并退出。此过滤器查找标记为“syslog”类型(由Filebeat)类型的日志,它将尝试grok用于解析传入的syslog日志,使其结构化和查询。

最后,我们将创建一个名为30-elasticsearch-output.conf:

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

插入以下输出配置:

/etc/logstash/conf.d/30-elasticsearch-output.conf

output {

elasticsearch {

hosts => ["localhost:9200"]

sniffing => true

manage_template => false

index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"

document_type => "%{[@metadata][type]}"

}

}

保存并退出。此输出基本上配置Logstash,以将所有节拍数据存储在运行于localhost:9200所使用节拍命名的索引(在我们的例子中为filebeat)的Elasticsearch中。

如果要为使用Filebeat输入的其他应用程序添加过滤器,请务必命名文件,以便它们在输入和输出配置之间进行排序(即在02和30之间)。

使用以下命令测试您的Logstash配置:

sudo service logstash configtest

Configuration OK如果没有语法错误,它应该显示。否则,尝试读取错误输出以查看您的Logstash配置有什么问题。

重新启动Logstash并启用它,使配置更改生效:

sudo service logstash restart

sudo update-rc.d logstash defaults 96 9

接下来,我们将加载示例Kibana仪表板。

加载Kibana仪表板

Elastic提供了几个示例Kibana仪表板和Beats索引模式,可以帮助您开始使用Kibana。虽然我们不会在本教程中使用仪表板,但是我们将加载它们,因此我们可以使用它包含的Filebeat索引模式。

首先,将示例仪表盘存档下载到您的主目录:

cd ~

curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip

unzip使用以下命令安装软件包:

sudo apt-get -y install unzip

接下来,提取存档的内容:

unzip beats-dashboards-*.zip

并使用以下命令将示例仪表板,可视化和Beats索引模式加载到Elasticsearch中:

cd beats-dashboards-*

./load.sh

这些是我们刚加载的索引模式:

[packetbeat-] YYYY.MM.DD

[topbeat-] YYYY.MM.DD

[filebeat-] YYYY.MM.DD

[winlogbeat-] YYYY.MM.DD

当我们开始使用Kibana时,我们将选择Filebeat索引模式作为默认值。

在Elasticsearch中加载文件搜索索引模板

因为我们计划使用Filebeat将日志发送到Elasticsearch,所以我们应该加载一个Filebeat索引模板。索引模板将配置Elasticsearch,以智能方式分析传入的Filebeat字段。

首先,将Filebeat索引模板下载到您的主目录:

cd ~

curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

然后使用以下命令加载模板:

curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

如果模板正确加载,您应该会看到如下消息:

Output:

{

"acknowledged" : true

}

现在我们的ELK服务器已准备好接收Filebeat数据了,我们继续在每个客户端服务器上设置Filebeat。

设置Filebeat(添加客户端服务器)

复制SSL证书

在您的ELK服务器上,将先决条件教程中创建的SSL证书复制到客户端服务器(替换客户端服务器的地址和您自己的登录名):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

提供登录凭据后,请确保证书副本成功。客户端服务器和ELK服务器之间的通信是必需的。

现在,在您的客户端服务器上,将ELK服务器的SSL证书复制到相应的位置(/ etc / pki / tls / certs):

sudo mkdir -p /etc/pki/tls/certs

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

现在我们将安装Topbeat软件包。

安装Filebeat包

在客户端服务器上,创建Beats源列表:

echo "deb https://packages.elastic.co/beats/apt stable main" |  sudo tee -a /etc/apt/sources.list.d/beats.list

它还使用与Elasticsearch相同的GPG密钥,可以使用以下命令安装:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

然后安装Filebeat包:

sudo apt-get update

sudo apt-get install filebeat

已安装Filebeat,但尚未配置。

配置文件

现在我们将配置Filebeat以连接到我们的ELK服务器上的Logstash。本节将引导您修改Filebeat附带的示例配置文件。当你完成这些步骤,你应该有一个看起来像一个文件这样。

在客户端服务器上,创建并编辑Filebeat配置文件:

sudo vi /etc/filebeat/filebeat.yml

注意: Filebeat的配置文件采用YAML格式,这意味着缩进非常重要!请务必使用与这些说明相同数量的空格。

在文件顶部附近,您将看到该prospectors部分,您可以在哪里定义探矿者,指定哪些日志文件应该发货,以及应如何处理。每个探矿者由-字符指示。

我们将修改现有探矿派syslog和auth.log以Logstash。在下面paths,注释掉该- /var/log/*.log文件。这将阻止Filebeat将该目录中的每一个都发送.log到Logstash。然后添加新条目syslog和auth.log。完成后应该看起来像这样:

filebeat.yml摘录1的5

...

paths:

- /var/log/auth.log

- /var/log/syslog

#        - /var/log/*.log

...

然后找到指定document_type:,取消注释它并将其值更改为“syslog”的行。修改后应该看起来像这样:

filebeat.yml摘录2的5

...

document_type: syslog

...

这指定此探测器中的日志类型为syslog(它是Logstash筛选器所查找的类型)。

如果要将其他文件发送到ELK服务器,或对Filebeat如何处理日志进行任何更改,请随时修改或添加探测器条目。

接下来,在该output部分下,找到所说的行,它表示elasticsearch:弹性搜索输出部分(我们不会使用)。删除或注释掉整个Elasticsearch输出部分(直到所说的行#logstash:)。

找到注释掉的Logstash输出部分,由说明的行#logstash:指示,并通过删除前面的内容取消注释#。在本节中,取消注释hosts: ["localhost:5044"]行。更改localhost为您的ELK服务器的私有IP地址(或主机名,如果您使用该选项):

filebeat.yml摘录3 of 5

### Logstash as output

logstash:

# The Logstash hosts

hosts: ["ELK_server_private_IP:5044"]

这将配置Filebeat以连接到您的ELK服务器上的Logstash端口5044(我们为之前指定的Logstash输入的端口)。

直接在hosts条目下,并且用相同的缩进,添加以下行:

filebeat.yml摘录4/5

bulk_max_size: 1024

接下来,找到该tls部分,并取消注释。然后取消注释指定的行certificate_authorities,并将其值更改为["/etc/pki/tls/certs/logstash-forwarder.crt"]。它应该看起来像这样:

filebeat.yml摘录5的5

...

tls:

# List of root certificates for HTTPS server verifications

certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

这将配置Filebeat以使用我们在ELK服务器上创建的SSL证书。

保存并退出。

现在重新启动Filebeat以使我们的更改到位:

sudo service filebeat restart

sudo update-rc.d filebeat defaults 95 10

现在Filebeat被发送syslog,并auth.log以您的ELK服务器上Logstash!对于您希望收集日志的所有其他服务器重复此部分。

测试Filebeat安装

如果您的ELK堆栈正确设置,Filebeat(在您的客户端服务器上)应该将您的日志发送到ELK服务器上的Logstash。Logstash应该将Filebeat数据加载到Elasticsearch的日期戳索引中filebeat-YYYY.MM.DD。

在您的ELK服务器上,验证Elasticsearch确实通过使用以下命令查询Filebeat索引来接收数据:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

你应该看到一堆如下的输出:

Sample Output:

...

{

"_index" : "filebeat-2016.01.29",

"_type" : "log",

"_id" : "AVKO98yuaHvsHQLa53HE",

"_score" : 1.0,

"_source":{"message":"Feb  3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"}

}

...

如果您的输出显示0次总匹配,Elasticsearch不会在您搜索的索引下加载任何日志,您应该检查您的设置是否有错误。

设置Topbeat(添加客户端服务器)

复制SSL证书

在您的ELK服务器上,将先决条件教程中创建的SSL证书复制到客户端服务器(替换客户端服务器的地址和您自己的登录名):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

提供登录凭据后,请确保证书副本成功。客户端服务器和ELK服务器之间的通信是必需的。

现在,在您的客户端服务器上,将ELK服务器的SSL证书复制到相应的位置(/ etc / pki / tls / certs):

sudo mkdir -p /etc/pki/tls/certs

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

现在我们将安装Topbeat软件包。

安装Topbeat包

在客户端服务器上,确保Beats源列表存在。打开/etc/apt/sources.list.d/beats.list编辑:

sudo vi /etc/apt/sources.list.d/beats.list

确保该行存在(如果它不存在则将其粘贴):

/etc/apt/sources.list.d/beats.list

deb https://packages.elastic.co/beats/apt stable main

保存并退出。

Topbeat使用与Elasticsearch和Filebeat相同的GPG密钥,可以使用以下命令安装:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

然后安装Topbeat软件包:

sudo apt-get update

sudo apt-get install topbeat

Tobeat现在已安装但尚未配置。

配置文件

现在我们将配置Topbeat连接到我们的ELK服务器上的Logstash。本节将引导您修改Topbeat附带的示例配置文件。当你完成这些步骤,你应该有一个看起来像一个文件这样。

在客户端服务器上,创建和编辑Topbeat配置文件:

sudo vi /etc/topbeat/topbeat.yml

注意: Topbeat的配置文件采用YAML格式,这意味着缩进非常重要!请务必使用与这些说明相同数量的空格。

在文件顶部附近,您将看到该input部分,您可以在其中指定哪些指标和统计信息应发送到ELK服务器。我们将使用默认输入设置,但可以随意更改以适应您的需要。

在该output部分下,找到所说的行,它表示elasticsearch:弹性搜索输出部分(我们不会使用)。删除或注释掉整个Elasticsearch输出部分(直到所说的行#logstash:)。

找到注释掉的Logstash输出部分,由说明的行#logstash:指示,并通过删除前面的内容取消注释#。在本节中,取消注释hosts: ["localhost:5044"]行。更改localhost为您的ELK服务器的私有IP地址(或主机名,如果您使用该选项):

topbeat.yml - 1的2

### Logstash as output

logstash:

# The Logstash hosts

hosts: ["ELK_server_private_IP:5044"]

这将配置Topbeat连接到您的ELK服务器上的Logstash端口5044(我们在前提条件教程中指定了Logstash输入的端口)。

接下来,找到该tls部分,并取消注释。然后取消注释指定的行certificate_authorities,并将其值更改为["/etc/pki/tls/certs/logstash-forwarder.crt"]。它应该看起来像这样:

topbeat.yml - 2的2

...

tls:

# List of root certificates for HTTPS server verifications

certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

这将配置Topbeat以在先决条件教程中使用我们在ELK服务器上创建的SSL证书。

保存并退出。

现在重新启动Topbeat以使我们的更改到位:

sudo service topbeat restart

sudo update-rc.d topbeat defaults 95 10

现在,Topbeat将您的客户端服务器的系统,进程和文件系统指标发送到您的ELK服务器!对于您希望以Topbeat指标衡量的所有其他服务器重复此部分。

测试Topbeat安装

如果您的ELK堆栈设置正确,则Topbeat(在客户端服务器上)应将您的日志发送到ELK服务器上的Logstash。Logstash应该将Topbeat数据加载到带有日期戳索引的Elasticsearch中topbeat-YYYY.MM.DD。

在您的ELK服务器上,验证Elasticsearch确实通过使用以下命令查询Topbeat索引来接收数据:

curl -XGET 'http://localhost:9200/topbeat-*/_search?pretty'

你应该看到一堆如下的输出:

Sample Output:

{

"_index" : "topbeat-2016.02.01",

"_type" : "process",

"_id" : "AVKeLSdP4HKUFv4CjZ7K",

"_score" : 1.0,

"_source":{"@timestamp":"2016-02-01T18:51:43.937Z","beat":{"hostname":"topbeat-01","name":"topbeat-01"},"count":1,"proc":{"cpu":{"user":0,"user_p":0,"system":50,"total":50,"start_time":"12:54"},"mem":{"size":0,"rss":0,"rss_p":0,"share":0},"name":"jbd2/vda1-8","pid":125,"ppid":2,"state":"sleeping"},"type":"process","@version":"1","host":"topbeat-01"}

}

如果您的输出显示0次总匹配,Elasticsearch将不会在您搜索的索引下加载任何Topbeat数据,您应该检查您的设置是否有错误。

设置Packetbeat(添加客户端服务器)

复制SSL证书

在您的ELK服务器上,将先决条件教程中创建的SSL证书复制到客户端服务器(替换客户端服务器的地址和您自己的登录名):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

提供登录凭据后,请确保证书副本成功。客户端服务器和ELK服务器之间的通信是必需的。

现在,在您的客户端服务器上,将ELK服务器的SSL证书复制到相应的位置(/ etc / pki / tls / certs):

sudo mkdir -p /etc/pki/tls/certs

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

现在我们将安装Topbeat软件包。

安装Topbeat包

在客户端服务器上,确保Beats源列表存在。打开文件/etc/apt/sources.list.d/beats.list进行编辑:

sudo nano /etc/apt/sources.list.d/beats.list

如果您以前安装了出货单,则此文件可能已包含以下行:

/etc/apt/source.list.d/beats.list

deb https://packages.elastic.co/beats/apt stable main

如果文件为空白,或者该行不存在,请添加并保存文件。然后退出编辑器。

要安装此源码,我们需要一个GPG密钥。Packetbeat使用与Elasticsearch相同的GPG密钥,我们使用以下命令安装:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

现在,安装Packetbeat包:

sudo apt-get update

sudo apt-get install packetbeat

Packetbeat现已安装,但需要先配置才能使用。

配置文件

Packetbeat需要知道要记录的内容以及发送数据的位置。我们将其配置为连接到我们的ELK服务器上的Logstash,并定义我们希望观看哪种流量。我们将通过修改Packetbeat附带的默认配置文件来实现。

在客户端服务器上,编辑Packetbeat配置文件:

sudo nano /etc/packetbeat/packetbeat.yml

注意: Packetbeat的配置文件采用YAML格式,这意味着缩进非常重要!请务必使用与这些说明相同数量的空格。

在文件顶部附近,您将看到该input部分,您可以在其中指定哪些指标和统计信息应发送到ELK服务器。我们将使用默认输入设置,但可以随意更改以适应您的需要。

选择从中捕获流量的网络接口。在Linux上,Packetbeat支持捕获安装了Packetbeat的服务器发送或接收的所有消息。为此,any用作设备:

packetbeat.yml

# Select the network interfaces to sniff the data. You can use the "any"

# keyword to sniff on all connected interfaces.

interfaces:

device: any

在本protocols节中,配置Packetbeat可以找到每个协议的端口。如果您使用任何非标准端口,请在此处添加。否则,默认值应该很好。

packetbeat.yml

protocols:

dns:

ports: [53]

include_authorities: true

include_additionals: true

http:

ports: [80, 8080, 8081, 5000, 8002]

memcache:

ports: [11211]

mysql:

ports: [3306]

pgsql:

ports: [5432]

redis:

ports: [6379]

thrift:

ports: [9090]

mongodb:

ports: [27017]

接下来,我们需要告诉Packetbeat发送数据的位置。

在该output部分下,找到开头的行elasticsearch:,表示弹性搜索输出部分。我们不会使用此部分,因此删除或注释整个Elasticsearch输出部分,直到所说的行#logstash:)。

开始在这里删除:

packetbeat.yml

### Elasticsearch as output

elasticsearch:

# Array of hosts to connect to.

# Scheme and port can be left out and will be set to the default (http and 9200)

...

并继续删除,直到找到这一行:

packetbeat.yml

### Logstash as output

我们不会将数据发送到Elasticsearch,而是将其发送到Logstash。所以找到被注释掉的Logstash输出部分,#logstash:.通过删除前面的那行以由Uncomment开头的行指示#。然后取消注释hosts: ["localhost:5044"]行并更改localhost为您的ELK服务器的私有IP地址。配置文件的部分应如下所示:

packetbeat.yml

### Logstash as output

logstash:

# The Logstash hosts

hosts: ["your_ELK_server_private_ip_address:5044"]

这将配置Packetbeat以连接到端口上的ELK服务器上的5044Logstash,这是我们在前提教程中为Logstash输入指定的端口。

接下来,找到该tls部分,并删除前面的注释tls:。然后取消注释指定的行certificate_authorities,并将其值更改为["/etc/pki/tls/certs/logstash-forwarder.crt"]:

packetbeat.yml

tls:

# List of root certificates for HTTPS server verifications

certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

这将配置Packetbeat以使用我们从ELK服务器复制的证书。没有这个,客户端将无法建立连接。

如果您想要仔细检查您的配置文件,请将此与此示例进行比较,这样可以避免大部分不必要的注释来提高可读性:

packetbeat.yml

############################# Sniffer #########################################

interfaces:

device: any

############################# Protocols #######################################

protocols:

dns:

ports: [53]

include_authorities: true

include_additionals: true

http:

ports: [80, 8080, 8081, 5000, 8002]

memcache:

ports: [11211]

mysql:

ports: [3306]

pgsql:

ports: [5432]

redis:

ports: [6379]

ELK-Stack部署指南

thrift:

ports: [9090]

mongodb:

ports: [27017]

############################# Output ##########################################

output:

### Logstash as output

logstash:

hosts: ["your_ELK_server_private_ip_address:5044"]

tls:

certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

############################# Logging #########################################

logging:

files:

rotateeverybytes: 10485760 # = 10MB

检查您的配置后,保存文件并退出文本编辑器。

现在重新启动Packetbeat以使您的更改到位:

sudo service packetbeat restart

并且当您的服务器重新启动时,将Packetbeat配置为启动:

sudo update-rc.d packetbeat defaults 95 10

对于您要监视的任何其他服务器重复此部分。

Packetbeat现在应该监听网络流量并将其发送到Logstash。我们来看看它是否正常工作。

测试Packetbeat安装

此时,您的客户端服务器上的Packetbeat应该将您网络流量的日志发送到ELK服务器上的Logstash。Logstash应该将Packetbeat数据加载到Elasticsearch中,该索引被称为日期戳索引 packetbeat-YYYY.MM.DD。我们来测试一下这个工作原理是在客户端机器上创建一个简单的HTTP请求,并在ELK服务器上的Elasticsearch中查找该请求。

在您的客户端服务器上,用于curl发出请求http://www.elastic.co。

curl http://www.elastic.co/ > /dev/null

然后,在您的ELK服务器上,验证Elasticsearch确实通过使用以下命令查询Packetbeat索引来接收数据:

curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'

你应该看到一堆如下的输出:

Output

{

"_index" : "packetbeat-2016.09.29",

"_type" : "http",

"_id" : "AVdDG6pDqHsDFrI4DAlI",

"_score" : 1.0,

"_source" : {

如果您的输出显示0次总点击次数,Elasticsearch将不会在您搜索的索引下加载任何Packetbeat数据,您应该在几秒钟后再次尝试,因为可能需要很短时间才能拾取数据。如果您在等待后仍然看不到任何结果,请检查您的设置是否有错误。确保您已将Packetbeat的配置文件指向您转移的证书,因为如果路径不正确,它将以静默方式失败。

日志分析服务 LOG

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[当人工智能遇上安全] 1.人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
下一篇:联邦学习专栏丨序言(深度好文)
相关文章