介绍
Packetbeat 允许您对应用程序级协议(如 HTTP 和 MySQL)以及 DNS 和其他服务实时监控网络流量。
要做到这一点,您可以在客户端机器上配置代理,称为发送者
,用于扫描和分析网络流量,并将消息绘制到交易中。这些发送者随后生成每个操作的记录,并将其发送到Elasticsearch或Logstash。
在本教程中,您将配置和使用Packetbeat与ELK堆栈来收集和可视化基础设施指标。
前提条件
- 一台 CentOS 7 服务器具有 4GB 的 RAM,配置在教程中描述的 ELK Stack 设置中(How To Install Elasticsearch, Logstash, and Kibana on CentOS 7)(https://andsky.com/tech/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7)。 按照教程来配置 ELK 堆栈并安装 Kibana 仪表板,但不要配置任何客户端机器
- One CentOS 7 服务器具有任何数量的 RAM,将作为客户端机器
- 每个服务器具有
sudo
特权的标准用户帐户 **。
步骤 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/
在您的客户端服务器上,运行以下命令将 Elasticsearch 公共 GPG 密钥导入 rpm:
1[environment second]
2sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
创建和编辑Packetbeat的新存储文件:
1[environment second]
2sudo vi /etc/yum.repos.d/elastic-beats.repo
将以下行添加到文件中:
1[label /etc/yum.repos.d/elastic-beats.repo]
2[beats]
3name=Elastic Beats Repository
4baseurl=https://packages.elastic.co/beats/yum/el/$basearch
5enabled=1
6gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
7gpgcheck=1
然后保存文件并离开编辑器。
现在,安装 Packetbeat 包:
1[environment second]
2sudo yum update
3sudo yum -y install packetbeat
Packetbeat 现在已安装,但需要配置才能使用。
步骤 3 – 在客户端上配置 Packetbeat
Packetbeat需要知道要在哪里登录和发送数据。让我们将其配置为在我们的ELK服务器上连接到Logstash,并定义我们希望它观看的流量类型。
在客户端服务器上,编辑 Packetbeat 配置文件:
1[environment second]
2sudo vi /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 systemctl start packetbeat
然后配置 Packetbeat 以便在服务器重新启动时启动:
1[environment second]
2sudo systemctl enable packetbeat
对于您想要监控的任何其他服务器,重复此部分。
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 "hits" : {
4 "total" : 3,
5 "max_score" : 1.0,
6 "hits" : [ {
7 "_index" : "packetbeat-2016.11.13",
8 "_type" : "dns",
9 "_id" : "AVheUqX0CSBq6gd6x-Oj",
10 "_score" : 1.0,
11 "_source" : {
12 "direction" : "out",
13 "server" : "",
14 "responsetime" : 49,
15 "resource" : "www.elastic.co",
16 "dns" : {
17 "additionals_count" : 0,
18 "answers" : [ {
19 "class" : "IN",
20 "data" : "2406:da00:ff00::6b16:f086",
21 "name" : "www.elastic.co",
22 "ttl" : 59,
23 "type" : "AAAA"
24 }, {
25 "class" : "IN",
26 "data" : "2406:da00:ff00::b849:ab0e",
27 "name" : "www.elastic.co",
28 "ttl" : 59,
29 "type" : "AAAA"
30 }, {
31 "class" : "IN",
32 "data" : "2406:da00:ff00::ccec:d96c",
33 "name" : "www.elastic.co",
34 "ttl" : 59,
35 "type" : "AAAA"
36 } ],
37 "answers_count" : 3,
38 "authorities_count" : 0,
39 "flags" : {
40 "authoritative" : false,
41 "recursion_allowed" : true,
42 "recursion_desired" : true,
43 "truncated_response" : false
44 },
45 "id" : 26078,
46 "op_code" : "QUERY",
47 "question" : {
48 "class" : "IN",
49 "name" : "www.elastic.co",
50 "type" : "AAAA"
51 },
52 "response_code" : "NOERROR"
53 },
54 "method" : "QUERY",
55 "count" : 1,
56 "client_ip" : "your_client_server_ip",
57 "proc" : "",
58 "transport" : "udp",
59 "status" : "OK",
60 "ip" : "8.8.8.8",
61 "client_port" : 52505,
62 "client_server" : "",
63 "port" : 53,
64 "@timestamp" : "2016-11-13T15:33:43.500Z",
65 "type" : "dns",
66 "query" : "class IN, type AAAA, www.elastic.co",
67 "client_proc" : "",
68 "beat" : {
69 "hostname" : "your_client_server_hostname",
70 "name" : "your_client_server_hostname"
71 },
72 "bytes_in" : 32,
73 "bytes_out" : 116,
74 "@version" : "1",
75 "host" : "your_client_server_hostname",
76 "tags" : [ "beats_input_raw_event" ]
77 }
78 ...
79 ...
80 } ]
81 }
82}
如果您的输出显示 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 等。