如何收集与Packetbeat和ELK基础设施指标在Ubuntu 14.04

介绍

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

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

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

先决条件

  • 一个Ubuntu的14.04服务器与4GB的RAM,在本教程中介绍的ELK设置配置如何在Ubuntu 14.04安装Elasticsearch,Logstash和Kibana 按照教程配置ELK并安装Kibana仪表板,但不要配置任何客户端计算机。
  • 一个Ubuntu 14.04服务器具有任何数量的RAM,将作为客户端机器。
  • 以标准用户帐户sudo权限为每个服务器 您可以通过以下的的第2步和3设置了一个标准帐户与Ubuntu 14.04初始服务器设置教程。

第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本身。 在客户端服务器上,确保Beats源列表存在。 打开文件/etc/apt/sources.list.d/beats.list编辑:

sudo nano /etc/apt/sources.list.d/beats.list

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

/etc/apt/source.list.d/beats.list
deb https://packages.elastic.co/beats/apt stable main

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

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

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

现在,安装Packetbeat软件包:

sudo apt-get update
sudo apt-get install packetbeat

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

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

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

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

sudo nano /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:

开始删除:

  ### 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)

    ...

并保持删除,直到找到这行:

  ### 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 service packetbeat restart

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

sudo update-rc.d packetbeat defaults 95 10

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

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

第4步 - 测试Packetbeat安装

此时,客户端服务器上的Packetbeat应将您的网络流量的日志发送到ELK服务器上的Logstash。 Logstash应载入中称为日期戳指数Packetbeat数据转换成Elasticsearch packetbeat-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{
  "_index" : "packetbeat-2016.09.19",
  "_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-19T15: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用户配置这些凭据。

单击设置选项卡页面的顶部。 现在,从在界面左侧的索引模式菜单中选择packetbeat- *:

选择Packetbeat索引模式

然后在屏幕顶部选择Discover选项卡上查看此数据。 您的屏幕上会显示以下内容:

Packetbeat日志条目

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

接下来,查看我们在本教程开始时加载的示例Packetbeat仪表板。 点击屏幕顶部的仪表盘选项卡,然后点击屏幕右侧的加载保存仪表盘图标。 您会看到一个列为Dashboard筛选器的分页建议:

查看示例Packetbeat仪表板类型

从建议列表中选择Packetbeat仪表板 因为我们只有几个网页请求的文件,在我们的索引,仪表板将导致未找到数据库,缓存,RPC交易,或其他结果的结果

查看示例Packetbeat仪表板顶部

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

查看示例Packetbeat仪表板底部

从这里,您可以基于索引数据创建图表。 例如,您可以创建一个基于响应时间显示HTTP查询细分的图表,以帮助跟踪Web应用程序的慢响应。 您可以通过使用子聚合来查找每个代码,访问的域以及其他更多的响应时间,从而进一步深入了解。 您可以探索Packetbeat文档,了解更多信息。

结论

现在,您的系统指标通过Elasticsearch和Logstash集中,您可以使用Kibana可视化它们,您应该可以一目了然地看到您的服务器的状态。 从这里,您可能想调查其他shippers,包括Filebeat,Topbeat和其他。 Beats页面上提供shippers的更多信息。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏