前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上使用Packetbeat和ELK收集基础结构度量标准

如何在Ubuntu 16.04上使用Packetbeat和ELK收集基础结构度量标准

原创
作者头像
好烟
修改2018-09-27 17:56:42
1.5K0
修改2018-09-27 17:56:42
举报

介绍

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

为此,您可以在客户端计算机上配置称为“发货人”的代理,这些代理会嗅探和解析网络流量并将消息映射到事务。然后,这些托运人为每个操作生成记录并将其发送到Elasticsearch或Logstash。获得数据后,您可以使用Kibana搜索,分析和可视化数据,以便您可以对基础架构做出明智的决策或解决问题。

在本教程中,您将配置和使用带有ELK堆栈的Packetbeat来收集和可视化基础架构指标。

准备

  • 一个带有4GB RAM的Ubuntu 16.04服务器,配置了ELK Stack设置。配置ELK堆栈并安装Kibana仪表板,但不要配置任何客户端计算机。(你需要一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)
  • 一个Ubuntu 16.04服务器,具有任意数量的RAM,可用作客户机。
  • 标准用户帐户,具有每个服务器的sudo权限。

步骤1 - 在Elasticsearch中加载Packetbeat索引模板

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

首先,登录您的ELK服务器:

代码语言:javascript
复制
ssh sammy@your_elk_server_ip

登录后,将Packetbeat索引模板下载到您的主目录:

代码语言:javascript
复制
cd ~
curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json

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

代码语言:javascript
复制
curl -XPUT 'http://localhost:9200/_template/packetbeat' -d@packetbeat.template-es2x.json

如果模板已成功加载,您将看到输出。

代码语言:javascript
复制
{"acknowledged":true}

现在您的ELK服务器已准备好接受来自Packetbeat的数据,让我们在客户端服务器上设置发货人。

步骤2 - 在客户端服务器上设置Packetbeat

要设置Packetbeat发货人,您需要将在先决条件教程中创建的SSL证书提取到客户端服务器。需要在客户端服务器和ELK服务器之间建立通信。

找到客户端服务器的IP地址。然后,在ELK服务器上,使用以下scp命令将SSL证书复制到客户端服务器:

代码语言:javascript
复制
scp /etc/pki/tls/certs/logstash-forwarder.crt sammy@your_client_server_private_ip_address:/tmp

提供密码后,请确保证书副本成功。

现在,登录到您的客户端服务器

代码语言:javascript
复制
ssh sammy@your_client_server_ip_address

登录后,将ELK服务器的SSL证书复制到/etc/pki/tls/certs目录中:

代码语言:javascript
复制
sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

接下来,我们需要安装Packetbeat本身。在客户端服务器上,确保存在Beats源列表。打开文件/etc/apt/sources.list.d/beats.list进行编辑:

代码语言:javascript
复制
sudo nano /etc/apt/sources.list.d/beats.list

如果您以前安装过托运人,则此文件可能已包含以下行:

代码语言:javascript
复制
deb https://packages.elastic.co/beats/apt stable main

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

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

代码语言:javascript
复制
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

现在,安装Packetbeat包:

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install packetbeat

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

步骤3 - 在客户端上配置Packetbeat

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

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

代码语言:javascript
复制
sudo nano /etc/packetbeat/packetbeat.yml

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

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

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

代码语言:javascript
复制
# 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可以找到每个协议的端口。如果您使用任何非标准端口,请在此处添加。否则,默认值应该没问题。

代码语言:javascript
复制
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:的行)。

从这里开始删除:

代码语言:javascript
复制
  ### 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)
​
    ...

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

代码语言:javascript
复制
  ### Logstash as output

我们不是将数据发送到Elasticsearch,而是将其发送给Logstash。因此,找到注释的Logstash输出部分,由以该#logstash:.开头的行开头,删除前面的部分#来取消注释。然后取消注释该hosts: ["localhost:5044"]行并更改localhost为ELK服务器的专用IP地址。配置文件的部分应如下所示:

代码语言:javascript
复制
  ### 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"]

代码语言:javascript
复制
    tls:
      # List of root certificates for HTTPS server verifications
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

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

如果要仔细检查配置文件,请将您的配置与此示例进行比较,该示例省略了大部分不必要的注释以提高可读性:

代码语言:javascript
复制
############################# 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以进行更改:

代码语言:javascript
复制
sudo service packetbeat restart

并将Packetbeat配置为在服务器重新启动时启动:

代码语言:javascript
复制
sudo update-rc.d packetbeat defaults 95 10

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

Packetbeat现在应该正在侦听网络流量并将其发送到Logstash。让我们看看它是否有效。

第4步 - 测试Packetbeat安装

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

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

代码语言:javascript
复制
curl http://www.elastic.co/ > /dev/null

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

代码语言:javascript
复制
curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'

你应该看到一堆看起来像这样的输出:

代码语言:javascript
复制
{
  "_index" : "packetbeat-2016.09.29",
  "_type" : "http",
  "_id" : "AVdDG6pDqHsDFrI4DAlI",
  "_score" : 1.0,
  "_source" : {
    "responsetime" : 80,
    "path" : "/",
    "beat" : {
      "hostname" : "your_client_server_hostname",
      "name" : "your_client_server_name"
    },
    "direction" : "out",
    "port" : 80,
    "server" : "",
    "status" : "OK",
    "params" : "",
    "count" : 1,
    "client_port" : 52072,
    "client_proc" : "",
    "ip" : "52.38.222.131",
    "bytes_out" : 432,
    "bytes_in" : 78,
    "query" : "GET /",
    "http" : {
      "code" : 301,
      "content_length" : 178,
      "phrase" : "Permanently"
    },
    "proc" : "",
    "client_ip" : "your_client_server_ip",
    "client_server" : "",
    "@timestamp" : "2016-09-29T15:41:07.725Z",
    "type" : "http",
    "method" : "GET",
    "@version" : "1",
    "host" : "your_client_server_hostname",
    "tags" : [ "beats_input_raw_event" ]
  }
}

如果您的输出显示总命中数为0,则Elasticsearch不会在您搜索的索引下加载任何Packetbeat数据,您应该在几秒钟后再次尝试,因为可能需要很短的时间才能获取数据。如果您在等待后仍未看到任何结果,请检查您的设置是否有错误。确保您在传输的证书上指向了Packetbeat的配置文件,因为如果路径不正确,这将无声地失败。

收到预期输出后,您可以继续下一步,了解如何使用Kibana查看网络流量的一些图表和图形。

第5步 - 使用Kibana可视化数据

当您在要收集系统统计信息的所有服务器上完成Packetbeat的设置后,让我们看看Kibana。

在Web浏览器中,转到ELK服务器的域名或公共IP地址。输入您的ELK服务器凭据后,您应该会看到您的Kibana Discover页面。

注意:在为Kibana配置用户时,您在先决条件教程中配置了这些凭据。

单击页面顶部的“设置”选项卡。现在,从界面左侧的Index Patterns菜单中选择packetbeat- *

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

从这里,您可以通过筛选可用字段来查看各种Packetbeat条目。您可以单击这些字段来添加它们,或使用聚合(计数,总和,最小值,最大值,中位数等)将它们可视化。

Kibana还提供了各种可视化,您可以使用它们来分析数据。单击屏幕顶部的“ 可视化”选项卡以列出可视化或打开已保存的可视化。

接下来,让我们看一下我们在本教程开头加载的示例Packetbeat仪表板。单击屏幕顶部的“ 仪表板”选项卡,然后单击屏幕右侧的“ 加载已保存的仪表板”图标。您会看到一个Dashboard过滤器列表作为分页建议:

从建议列表中选择Packetbeat-Dashboard。由于我们的索引中只有少量Web请求作为文档,因此仪表板将导致找不到 DB,Cache,RPC事务或其他结果。

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

从这里,您可以根据索引数据创建图表。例如,您可以创建一个图表,根据响应时间显示HTTP查询细分,这有助于跟踪Web应用程序的慢响应。您可以通过使用子聚合来查找每个代码,访问的域以及更多内容的响应时间。

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

结论

现在您的系统指标通过Elasticsearch和Logstash集中,并且您可以使用Kibana将它们可视化,您应该能够一目了然地看到您的服务器。从这里开始,您可能需要调查其他托运人,包括Filebeat,Topbeat等。有关可用出货单的更多信息,请查看Beats页面。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Gather Infrastructure Metrics with Packetbeat and ELK on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备
  • 步骤1 - 在Elasticsearch中加载Packetbeat索引模板
  • 步骤2 - 在客户端服务器上设置Packetbeat
  • 步骤3 - 在客户端上配置Packetbeat
  • 第4步 - 测试Packetbeat安装
  • 第5步 - 使用Kibana可视化数据
  • 结论
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档