如何在 Ubuntu 16.04 上使用 Packetbeat 和 ELK 收集基础设施指标

介绍

Packetbeat 允许您对应用程序级协议(如 HTTP 和 MySQL)以及 DNS 和其他服务实时监控网络流量。

要做到这一点,您可以在客户端机器上配置代理,称为发送者,用于扫描和分析网络流量,并将消息绘制到交易中。这些发送者随后生成每个操作的记录,并将其发送到Elasticsearch或Logstash。

在本教程中,您将配置和使用Packetbeat与ELK堆栈来收集和可视化基础设施指标。

前提条件

步骤 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-** *:

Select Packetbeat Index Pattern

然后选择屏幕顶部的发现选项卡以查看此数据,您将在屏幕上看到以下内容:

Packetbeat log entries

从这里,您可以通过过滤可用的字段来查看您的各种 Packetbeat 条目. 您可以点击这些字段来添加它们,或使用汇总(计数,总和,min,max,中位数等)来可视化它们。

Kibana 还提供一系列可用来分析数据的可视化,请点击屏幕顶部的 Visualize 选项卡来列出可视化或打开已保存的可视化。

Packetbeat Visualizations

接下来,让我们看看我们在本教程开始时加载的样本 Packetbeat 仪表板。 点击屏幕顶部的 Dashboard 选项卡,然后点击屏幕右侧的 ** Load Saved Dashboard** 图标。

View Example Packetbeat Dashboard Types

从建议列表中选择 Packetbeat-Dashboard . 由于我们在我们的索引中只有少数网页请求作为文档,仪表板将导致对DB、缓存、RPC交易或其他结果没有找到 ** 结果。

View Example Packetbeat Dashboard Top

但是,如果您向下滚动,您将看到从您安装了 Packetbeat 的客户端服务器中收集的各种指标。

View Example Packetbeat Dashboard Bottom

例如,您可以创建一个图表,显示基于响应时间的 HTTP 查询分解,这可以帮助追踪来自 Web 应用程序的缓慢响应,并且您可以通过使用子集合来查找每个代码的响应时间,访问的域和更多。

您可以浏览 Packetbeat 文档以了解更多信息。

结论

现在,您的系统指标通过 Elasticsearch 和 Logstash 集中化,并且您可以使用 Kibana 可视化它们,您应该能够一眼就能看到您的服务器的位置。从这里开始,您可能想要调查其他发送商,包括 Filebeat、Topbeat 等。

Published At
Categories with 技术
comments powered by Disqus