介绍
Packetbeat 允许您对应用程序级协议(如 HTTP 和 MySQL)以及 DNS 和其他服务实时监控网络流量。
要做到这一点,您可以在客户端机器上配置代理,称为发送者
,用于扫描和分析网络流量,并将消息绘制到交易中。这些发送者随后生成每个操作的记录,并将其发送到Elasticsearch或Logstash。
在本教程中,您将配置和使用Packetbeat与ELK堆栈来收集和可视化基础设施指标。
前提条件
- 一台 Ubuntu 16.04 服务器具有 4 GB 的 RAM,配置在教程中描述的 ELK Stack 设置中(How To Install Elasticsearch, Logstash, and Kibana on Ubuntu 16.04)(https://andsky.com/tech/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-16-04)。 按照教程来配置 ELK 堆栈并安装 Kibana 仪表板,但不要配置任何客户端机器。
- 一台 Ubuntu 16.04 服务器具有任何数量的 RAM,这将作为客户端机器。
步骤 1 — 在 Elasticsearch 中加载 Packetbeat 索引模板
由于我们计划使用 Packetbeat 将日志发送到 Elasticsearch,因此我们首先加载了 Packetbeat 索引模板,该模板会配置 Elasticsearch 以智能的方式分析接入的 Packetbeat 字段。
首先,登入您的 ELK 服务器:
1[environment local]
2ssh sammy@your_elk_server_ip
一旦登录,请下载 Packetbeat 索引模板到您的主目录:
1cd ~
2curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json
然后用这个命令加载 template:
1curl -XPUT 'http://localhost:9200/_template/packetbeat' [email protected]
您将看到输出,如果模板已成功加载。
1[secondary_label Output]
2{"acknowledged":true}
现在,您的 ELK 服务器已经准备好接收来自 Packetbeat 的数据,让我们在客户端服务器上设置发送商。
步骤 2 — 在客户端服务器上设置 Packetbeat
要设置 Packetbeat 发送器,您需要将您在前提教程中创建的 SSL 证书传递给客户端服务器,以建立客户端服务器与 ELK 服务器之间的通信。
然后, 在您的 ELK 服务器上 ,使用scp
命令将 SSL 证书复制到您的客户端服务器:
1scp /etc/pki/tls/certs/logstash-forwarder.crt sammy@your_client_server_private_ip_address:/tmp
输入密码后,确保证书副本成功。
现在,登录您的客户端服务器:
1[environment local]
2ssh sammy@your_client_server_ip_address
登录后,将 ELK 服务器的 SSL 证书复制到 /etc/pki/tls/certs
目录:
1[environment second]
2sudo mkdir -p /etc/pki/tls/certs
3sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
接下来,我们需要自己安装 Packetbeat. 在您的客户端服务器上,确保 Beats 源列表存在。 打开文件 /etc/apt/sources.list.d/beats.list
进行编辑:
1[environment second]
2sudo nano /etc/apt/sources.list.d/beats.list
如果您之前已经安装了 shippers,此文件可能已经包含以下行:
1[label /etc/apt/source.list.d/beats.list]
2deb https://packages.elastic.co/beats/apt stable main
如果文件是空的,或者这个行不存在,请添加它并保存文件,然后离开编辑器。
要安装此源,我们需要一个 GPG 密钥. Packetbeat 使用与 Elasticsearch 相同的 GPG 密钥,我们用这个命令安装:
1[environment second]
2wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
现在,安装 Packetbeat 包:
1[environment second]
2sudo apt-get update
3sudo apt-get install packetbeat
Packetbeat 现在已安装,但需要配置才能使用。
步骤 3 – 在客户端上配置 Packetbeat
Packetbeat需要知道要在哪里登录和发送数据。让我们将其配置为在我们的ELK服务器上连接到Logstash,并定义我们希望它观看的流量类型。
在客户端服务器上,编辑 Packetbeat 配置文件:
1[environment second]
2sudo nano /etc/packetbeat/packetbeat.yml
<$>[注] 注: Packetbeat 的配置文件是 YAML 格式,这意味着插入非常重要!请确保使用这些指示中指定的相同数量的空间。
在文件的顶部,你会看到输入
部分,这就是你可以指定哪些指标和统计数据应该发送到ELK服务器的地方。
在 Linux 上,Packetbeat 支持捕捉由安装了 Packetbeat 的服务器发送或接收的所有消息。
1[label packetbeat.yml]
2# Select the network interfaces to sniff the data. You can use the "any"
3# keyword to sniff on all connected interfaces.
4interfaces:
5 device: any
在协议
部分中,配置Packetbeat可以找到每个协议的端口. 如果您使用任何非标准端口,请在这里添加它们。
1[label packetbeat.yml]
2protocols:
3 dns:
4 ports: [53]
5
6 include_authorities: true
7 include_additionals: true
8
9 http:
10 ports: [80, 8080, 8081, 5000, 8002]
11
12 memcache:
13 ports: [11211]
14
15 mysql:
16 ports: [3306]
17
18 pgsql:
19 ports: [5432]
20
21 redis:
22 ports: [6379]
23
24 thrift:
25 ports: [9090]
26
27 mongodb:
28 ports: [27017]
接下来,我们需要告诉Packetbeat将其数据发送到哪里。
在输出
部分中,找到以elasticsearch:
开头的行,指示 Elasticsearch 输出部分. 我们不会使用这个部分,所以 删除或评论整个 Elasticsearch 输出部分 ,直到说# logstash:
的行)。
点击这里开始删除:
1[label packetbeat.yml]
2 ### Elasticsearch as output
3 elasticsearch:
4 # Array of hosts to connect to.
5 # Scheme and port can be left out and will be set to the default (http and 9200)
6
7 ...
继续删除,直到你找到这个行:
1[label packetbeat.yml]
2 ### Logstash as output
不要将数据发送到Elasticsearch,我们会将其发送到Logstash,所以找出评论的Logstash输出部分,标记为从# logstash:
开始的行。
1[label packetbeat.yml]
2 ### Logstash as output
3 logstash:
4 # The Logstash hosts
5 hosts: ["your_ELK_server_private_ip_address:5044"]
这将配置 Packetbeat 连接到您的 ELK 服务器上的 Logstash 在端口 5044
,我们在前提教程中为 Logstash 输入指定的端口。
接下来,找到tls
部分,然后删除tls:
前面的评论,然后删除指定certificate_authorities
的行,并将其值更改为[
/etc/pki/tls/certs/logstash-forwarder.crt``:
1[label packetbeat.yml]
2 tls:
3 # List of root certificates for HTTPS server verifications
4 certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
这将配置 Packetbeat 以使用我们从 ELK 服务器复制的证书,否则客户端将无法建立连接。
如果您想对配置文件进行双重检查,请将您的配置文件与以下示例进行比较,其中大多数不必要的评论被省略以提高可读性:
1[label packetbeat.yml]
2############################# Sniffer #########################################
3interfaces:
4 device: any
5
6############################# Protocols #######################################
7protocols:
8 dns:
9 ports: [53]
10
11 include_authorities: true
12 include_additionals: true
13
14 http:
15 ports: [80, 8080, 8081, 5000, 8002]
16
17 memcache:
18 ports: [11211]
19
20 mysql:
21 ports: [3306]
22
23 pgsql:
24 ports: [5432]
25
26 redis:
27 ports: [6379]
28
29 thrift:
30 ports: [9090]
31
32 mongodb:
33 ports: [27017]
34
35############################# Output ##########################################
36output:
37
38 ### Logstash as output
39 logstash:
40 hosts: ["your_ELK_server_private_ip_address:5044"]
41
42 tls:
43 certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
44
45############################# Logging #########################################
46logging:
47
48 files:
49 rotateeverybytes: 10485760 # = 10MB
一旦您审查了配置,保存文件并退出文本编辑器。
现在重新启动 Packetbeat 以将您的更改置于位置:
1[environment second]
2sudo service packetbeat restart
然后配置 Packetbeat 以便在服务器重新启动时启动:
1[environment second]
2sudo update-rc.d packetbeat defaults 95 10
对于您想要监控的任何其他服务器,重复此部分。
Packetbeat现在应该听网络流量,并将其发送到Logstash。
步骤 4 – 测试 Packetbeat 安装
在此时,Packetbeat 应该在您的客户端服务器上将您的网络流量日志发送到您的 ELK 服务器上的 Logstash。Logstash 应该将 Packetbeat 数据加载到 Elasticsearch 以名为 packetbeat-YYYYYY.MM.DD
的日期标记的索引中。
在您的客户端服务器上,使用‘curl’来向‘http://www.elastic.co’提出请求。
1[environment second]
2curl http://www.elastic.co/ > /dev/null
然后,在您的 ELK 服务器上,通过此命令查询 Packetbeat 索引来验证 Elasticsearch 是否确实接收了数据:
1curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'
你应该看到一大堆的输出,看起来像这样:
1[secondary_label Output]
2{
3 "_index" : "packetbeat-2016.09.29",
4 "_type" : "http",
5 "_id" : "AVdDG6pDqHsDFrI4DAlI",
6 "_score" : 1.0,
7 "_source" : {
8 "responsetime" : 80,
9 "path" : "/",
10 "beat" : {
11 "hostname" : "your_client_server_hostname",
12 "name" : "your_client_server_name"
13 },
14 "direction" : "out",
15 "port" : 80,
16 "server" : "",
17 "status" : "OK",
18 "params" : "",
19 "count" : 1,
20 "client_port" : 52072,
21 "client_proc" : "",
22 "ip" : "52.38.222.131",
23 "bytes_out" : 432,
24 "bytes_in" : 78,
25 "query" : "GET /",
26 "http" : {
27 "code" : 301,
28 "content_length" : 178,
29 "phrase" : "Permanently"
30 },
31 "proc" : "",
32 "client_ip" : "your_client_server_ip",
33 "client_server" : "",
34 "@timestamp" : "2016-09-29T15:41:07.725Z",
35 "type" : "http",
36 "method" : "GET",
37 "@version" : "1",
38 "host" : "your_client_server_hostname",
39 "tags" : [ "beats_input_raw_event" ]
40 }
41}
如果您的输出显示 0 个总次数,Elasticsearch 不会在您搜索的索引下加载任何 Packetbeat 数据,您应该在几秒钟后再次尝试,因为数据可能需要很短的时间才能被收集。
一旦您收到预期的输出,您可以转到下一步,并学习如何使用Kibana查看网络流量的一些图表和图表。
步骤5:使用Kibana可视化数据
当您完成在您想要收集系统统计数据的所有服务器上设置 Packetbeat 时,让我们看看Kibana。
在 Web 浏览器中,访问您的 ELK 服务器的域名或公共 IP 地址. 输入 ELK 服务器的凭证后,您应该看到您的 Kibana Discover 页面。
<$>[注] 注 :您在为Kibana配置用户时,在先决条件教程中配置了这些凭证。
现在,从界面左侧的 Index Patterns 菜单中选择 ** packetbeat-** *:
然后选择屏幕顶部的发现
选项卡以查看此数据,您将在屏幕上看到以下内容:
从这里,您可以通过过滤可用的字段来查看您的各种 Packetbeat 条目. 您可以点击这些字段来添加它们,或使用汇总(计数,总和,min,max,中位数等)来可视化它们。
Kibana 还提供一系列可用来分析数据的可视化,请点击屏幕顶部的 Visualize 选项卡来列出可视化或打开已保存的可视化。
接下来,让我们看看我们在本教程开始时加载的样本 Packetbeat 仪表板。 点击屏幕顶部的 Dashboard 选项卡,然后点击屏幕右侧的 ** Load Saved Dashboard** 图标。
从建议列表中选择 Packetbeat-Dashboard . 由于我们在我们的索引中只有少数网页请求作为文档,仪表板将导致对DB、缓存、RPC交易或其他结果没有找到 ** 结果。
但是,如果您向下滚动,您将看到从您安装了 Packetbeat 的客户端服务器中收集的各种指标。
例如,您可以创建一个图表,显示基于响应时间的 HTTP 查询分解,这可以帮助追踪来自 Web 应用程序的缓慢响应,并且您可以通过使用子集合来查找每个代码的响应时间,访问的域和更多。
您可以浏览 Packetbeat 文档以了解更多信息。
结论
现在,您的系统指标通过 Elasticsearch 和 Logstash 集中化,并且您可以使用 Kibana 可视化它们,您应该能够一眼就能看到您的服务器的位置。从这里开始,您可能想要调查其他发送商,包括 Filebeat、Topbeat 等。