介绍
Packetbeat允许您监视应用级协议(如HTTP和MySQL)以及DNS和其他服务的实时网络流量。 为此,可以在客户端计算机上配置称为“shippers”的代理,该代理嗅探和解析网络流量并将消息映射到事务。然后,这些shippers为每个操作生成记录,并将其发送到Elasticsearch或Logstash。获得数据后,您可以使用Kibana搜索,分析和可视化数据,以便您能够就基础设施做出明智的决策或排查问题。 在本教程中,您将配置和使用Packetbeat和ELK来收集和可视化基础架构指标。先决条件
- 一个CentOS 7服务器有4GB的RAM,在本教程中介绍的ELK设置配置如何在CentOS 7安装Elasticsearch,Logstash和Kibana 。按照教程配置ELK和安装Kibana仪表板,但不要配置任何客户端机器。
- 一个CentOS 7服务器具有任何数量的RAM,将作为客户端机器。
- 以标准用户帐户
sudo
权限为每个服务器 。 您可以按照设立一个标准帐户在CentOS 7初始服务器设置教程。
第1步 - 在Elasticsearch中加载Packetbeat索引模板
因为我们计划使用Packetbeat将日志发送到Elasticsearch,我们首先加载Packetbeat索引模板,该模板将Elasticsearch配置为以智能方式分析传入的Packetbeat字段。 首先,登录到您的ELK服务器:ssh sammy@your_elk_server_ip
登录后,将Packetbeat索引模板下载到您的主目录中:
cd ~
curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json
然后使用此命令加载模板:
curl -XPUT 'http://localhost:9200/_template/packetbeat' -d@packetbeat.template-es2x.json
如果模板已成功加载,您将看到输出。
Output{"acknowledged":true}
现在您的ELK服务器已准备好接受来自Packetbeat的数据,让我们在客户端服务器上设置shippers。
第2步 - 在客户端服务器上设置Packetbeat
要设置Packetbeat发运器,您需要获取在必要教程中创建的SSL证书到客户端服务器。需要在客户端服务器和ELK服务器之间建立通信。 找到客户端服务器的IP地址。然后, 您的ELK服务器上 ,SSL证书复制到使用客户端服务器scp
命令:
scp /etc/pki/tls/certs/logstash-forwarder.crt sammy@your_client_server_private_ip_address:/tmp
提供密码后,请确保证书复制成功。 现在,登录到
客户端服务器 :
ssh sammy@your_client_server_ip_address
一旦登录,ELK服务器的SSL证书复制到
/etc/pki/tls/certs
目录:
sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
接下来,我们需要安装Packetbeat本身。在客户端服务器上,运行以下命令将Elasticsearch公用GPG密钥导入rpm:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
为Packetbeat创建和编辑新的存储库文件:
sudo vi /etc/yum.repos.d/elastic-beats.repo
将以下行添加到文件:
/etc/yum.repos.d/elastic-beats.repo
[beats]
name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1
然后保存文件并退出编辑器。 现在,安装Packetbeat软件包:
sudo yum update
sudo yum -y install packetbeat
Packetbeat现已安装,但需要配置才能使用。
第3步 - 在客户端上配置Packetbeat
Packetbeat需要知道要记录什么以及发送数据的位置。让我们将其配置为连接到我们的ELK服务器上的Logstash,并定义我们想要观看的流量类型。我们将通过修改Packetbeat附带的默认配置文件来实现。 在客户端服务器上,编辑Packetbeat配置文件:sudo vi /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输出部分。 我们不打算使用这个部分,所以
删除或注释掉整个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:.
通过删除前面的注释去掉该行
#
。 然后取消该
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服务器上Logstash在端口
5044
,我们在必备教程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]
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 systemctl start packetbeat
并配置Packetbeat在服务器重新启动时启动:
sudo systemctl enable packetbeat
对任何其他要监视的服务器重复此部分。 Packetbeat现在应该监听网络流量并将其发送到Logstash。让我们看看它是否工作。
第4步 - 测试Packetbeat安装
此时,客户端服务器上的Packetbeat应将您的网络流量的日志发送到ELK服务器上的Logstash。 Logstash应载入中称为日期戳指数Packetbeat数据转换成Elasticsearchpacketbeat-YYYY.MM.DD
。让我们通过在客户端机器上创建一个简单的HTTP请求并在ELK服务器上的Elasticsearch中寻找该请求来测试这个工作。 在客户端服务器上,使用
curl
做出请求
http://www.elastic.co
。
curl http://www.elastic.co/ > /dev/null
然后,在您的ELK服务器上,通过使用此命令查询Packetbeat索引来验证Elasticsearch确实正在接收数据:
curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'
你应该看到一堆看起来像这样的输出:
Output{
"hits" : {
"total" : 3,
"max_score" : 1.0,
"hits" : [ {
"_index" : "packetbeat-2016.11.13",
"_type" : "dns",
"_id" : "AVheUqX0CSBq6gd6x-Oj",
"_score" : 1.0,
"_source" : {
"direction" : "out",
"server" : "",
"responsetime" : 49,
"resource" : "www.elastic.co",
"dns" : {
"additionals_count" : 0,
"answers" : [ {
"class" : "IN",
"data" : "2406:da00:ff00::6b16:f086",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
}, {
"class" : "IN",
"data" : "2406:da00:ff00::b849:ab0e",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
}, {
"class" : "IN",
"data" : "2406:da00:ff00::ccec:d96c",
"name" : "www.elastic.co",
"ttl" : 59,
"type" : "AAAA"
} ],
"answers_count" : 3,
"authorities_count" : 0,
"flags" : {
"authoritative" : false,
"recursion_allowed" : true,
"recursion_desired" : true,
"truncated_response" : false
},
"id" : 26078,
"op_code" : "QUERY",
"question" : {
"class" : "IN",
"name" : "www.elastic.co",
"type" : "AAAA"
},
"response_code" : "NOERROR"
},
"method" : "QUERY",
"count" : 1,
"client_ip" : "your_client_server_ip",
"proc" : "",
"transport" : "udp",
"status" : "OK",
"ip" : "8.8.8.8",
"client_port" : 52505,
"client_server" : "",
"port" : 53,
"@timestamp" : "2016-11-13T15:33:43.500Z",
"type" : "dns",
"query" : "class IN, type AAAA, www.elastic.co",
"client_proc" : "",
"beat" : {
"hostname" : "your_client_server_hostname",
"name" : "your_client_server_hostname"
},
"bytes_in" : 32,
"bytes_out" : 116,
"@version" : "1",
"host" : "your_client_server_hostname",
"tags" : [ "beats_input_raw_event" ]
}
...
...
} ]
}
}
如果您的输出显示总共0次匹配,Elasticsearch不会在您搜索的索引下加载任何Packetbeat数据,并且您应该在几秒钟后再次尝试,因为可能需要很短时间才能获取数据。如果在等待后仍未看到结果,请检查您的设置是否有错误。确保您已经将Packetbeat的配置文件指向您转移的证书,因为如果路径不正确,将会以静默方式失败。 一旦收到预期的输出,您可以继续下一步,并了解如何使用Kibana查看您的网络流量的一些图表和图表。