如何在CentOS 7上利用PacketBit和ELK收集基础设施指标

介绍

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

为此,您可以在客户端机器上配置称为shipper的代理,这些代理可以嗅探和解析网络通信,并将消息映射到事务。然后,这些shipper为每个操作生成记录,并将它们发送到Elasticearch或Logstash。一旦有了数据,就可以使用Kibana搜索、分析数据,以及将其可视化,以便对基础设施做出明智的决定或排除问题。

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

准备

  • 一台CentOS 7服务器,内存为4GB,配置elk堆栈并安装Kibana仪表板,但不要配置任何客户端机器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器
  • 为每台服务器配置具有sudo特权的标准用户帐户。

第一步-在Elasticearch中加载Packetbeat索引模板

因为我们计划使用Packetbeat将日志发送到ElasticSearch,所以我们首先加载Packetbeat索引模板,该模板将Elasticearch配置为以一种智能的方式分析传入的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中的数据了,让我们在客户端服务器上设置shipper。

第二步-在客户端服务器上设置Packetbeat

要设置Packetbeatshipper,您需要将您在准备中创建的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。在客户端服务器上,运行以下命令将Elasticearch公共GPG密钥导入rpm:

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

为Packetbeat创建和编辑一个新的存储库文件:

sudo vi /etc/yum.repos.d/elastic-beats.repo

将下列行添加到文件中:

/etc/yum.repos.d/elastic-beats.repo

[beats]
name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

然后保存文件并退出编辑器。

现在,安装Packetbeat包:

sudo yum update
sudo yum -y install packetbeat

Packetbeat现在已经安装好了,但需要在使用它之前进行配置。

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

Packetbeat需要知道记录的内容和发送数据的位置。让我们将其配置为连接到我们ELK服务器上的Logstash,并定义我们希望它监视的流量类型。我们将通过修改Packetbeat附带的默认配置文件来做到这一点。

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

sudo vi /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:开头的行,它表示Elasticearch的输出部分。我们不打算使用这个部分,所以 删除或注释掉整个Elasticearch输出部分 ,直到这一行:#logstash:)

从这里开始删除:

packetbeat.yml

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

然后继续删除,直到您找到这一行:

packetbeat.yml

  ### 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,使其连接到端口5044上ELK服务器上的Logstash。该端口就是我们在准备中为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 systemctl start packetbeat

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

sudo systemctl enable packetbeat

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

Packetbeat现在应该可以监听网络流量并将其发送给Logstash。让我们看看它是否有效。

第四步-测试Packetbeat安装

此时,客户端服务器上的Packetbeat应该将网络流量的日志发送到ELK服务器上的Logstash。Logstash应该在一个名为packetbeat-YYYY.MM.DD的带日期戳的索引中将Packetbeat数据加载到Elasticsearch中。让我们在客户端机器上创建一个简单的HTTP请求,并在ELK服务器上的Elasticsearch中查找该请求,从而测试它是否有效。

在客户端服务器上,使用curlhttp://www.elastic.co提出请求。

curl http://www.elastic.co/ > /dev/null

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

curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'

您应该看到一堆如下所示的输出:

{
  "hits" : {
    "total" : 3,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "packetbeat-2016.11.13",
      "_type" : "dns",
      "_id" : "AVheUqX0CSBq6gd6x-Oj",
      "_score" : 1.0,
      "_source" : {
        "direction" : "out",
        "server" : "",
        "responsetime" : 49,
        "resource" : "www.elastic.co",
        "dns" : {
          "additionals_count" : 0,
          "answers" : [ {
            "class" : "IN",
            "data" : "2406:da00:ff00::6b16:f086",
            "name" : "www.elastic.co",
            "ttl" : 59,
            "type" : "AAAA"
          }, {
            "class" : "IN",
            "data" : "2406:da00:ff00::b849:ab0e",
            "name" : "www.elastic.co",
            "ttl" : 59,
            "type" : "AAAA"
          }, {
            "class" : "IN",
            "data" : "2406:da00:ff00::ccec:d96c",
            "name" : "www.elastic.co",
            "ttl" : 59,
            "type" : "AAAA"
          } ],
          "answers_count" : 3,
          "authorities_count" : 0,
          "flags" : {
            "authoritative" : false,
            "recursion_allowed" : true,
            "recursion_desired" : true,
            "truncated_response" : false
          },
          "id" : 26078,
          "op_code" : "QUERY",
          "question" : {
            "class" : "IN",
            "name" : "www.elastic.co",
            "type" : "AAAA"
          },
          "response_code" : "NOERROR"
        },
        "method" : "QUERY",
        "count" : 1,
        "client_ip" : "your_client_server_ip",
        "proc" : "",
        "transport" : "udp",
        "status" : "OK",
        "ip" : "8.8.8.8",
        "client_port" : 52505,
        "client_server" : "",
        "port" : 53,
        "@timestamp" : "2016-11-13T15:33:43.500Z",
        "type" : "dns",
        "query" : "class IN, type AAAA, www.elastic.co",
        "client_proc" : "",
        "beat" : {
          "hostname" : "your_client_server_hostname",
          "name" : "your_client_server_hostname"
        },
        "bytes_in" : 32,
        "bytes_out" : 116,
        "@version" : "1",
        "host" : "your_client_server_hostname",
        "tags" : [ "beats_input_raw_event" ]
      }
    ...
    ...
    } ]
  }
}

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

一旦收到预期的输出,就可以继续下一步,学习如何使用Kibana查看网络流量的一些图表。

第五步-使用Kibana将数据可视化

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

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

:当您为Kibana配置用户时,您已经在准备中配置了这些凭据。

单击 Settings 页顶部的选项卡。现在,从位于接口左侧的 Index Patterns菜单选择Packetbeat -* ,并将其设置为默认索引:

然后在屏幕顶部选择Discover查看此数据。您将在屏幕上看到以下内容:

在这里,您可以通过对可用字段进行筛选来查看您的各个Packetbeat项。您可以单击这些字段来添加它们,或者使用聚合(计数、和、最小、最大值、中值等)将它们可视化。

Kibana还提供了广泛的可视化,您可以使用这些可视化来分析数据。单击在屏幕顶部的 Visualize 选项卡列出可视化或打开保存的可视化。

接下来,让我们看看我们在本教程开始时加载的示例Packetbeat仪表板。单击位于屏幕顶部的 Dashboard 选项卡,然后在屏幕的右侧单击 Load Saved Dashboard 图标。您将看到作为分页建议的仪表板过滤器列表:

从建议清单上选择 Packetbeat-Dashboard 。由于索引中只有少数几个web请求作为文档,所以 对于DB、Cache、RPC事务或其他结果仪表板将显示 No results found

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

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

结语

现在您的系统指标已经通过ElasticSearch和Logstash进行了集中,并且您使用Kibana可视化它们,您应该能够一目了然地看到您的服务器。从这里开始,您可能需要调查其他托运人,包括Filebeat,Topbeat等。

更多Linux教程请前往腾讯云+社区学习更多知识。 参考文献:《How To Gather Infrastructure Metrics with Packetbeat and ELK on CentOS 7》

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Rsyslog,Logstash和Elasticsearch集中日志

了解组织生成的数百万条日志行是一项艰巨的挑战。一方面,这些日志行提供了应用程序性能,服务器性能指标和安全性的视图。另一方面,日志管理和分析可能非常耗时,这可能会...

62320
来自专栏张戈的专栏

WordPress启用memcached动态缓存以及报错解决

张戈博客目前用的是Nginx 的 fastcgi 缓存方案,属于纯净态缓存模式,所以前台登录态什么的基本都没了。如果要兼顾前台登录态,又想速度快,有没有解决方案...

61190
来自专栏YG小书屋

ES缓存

37170
来自专栏Python、Flask、Django

Elasticsearch 集成到项目中记录(现阶段已完成)

16620
来自专栏前端儿

【Echo】实验 -- 实现 C/C++下UDP, 服务器/客户端 通讯

16010
来自专栏向治洪

使用Gitbook写电子书

今天要给大家说的是如何利用GitBook编写一本属于自己的点子书。 1,GitBook Editor 首先到官网下载GitBook Editor,目前支持Mac...

29490
来自专栏腾讯云Elasticsearch Service

一文快速上手Logstash

Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为E...

18.5K130
来自专栏开发与安全

socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)

在前面的系列网络编程文章中,我们都是使用socket 自己实现客户端和服务器端来互相发数据测试,现在尝试使用socket 客户端发 送http 请求给某个网站,...

1.3K00
来自专栏FreeBuf

ubuntu上安装Apache2+ModSecurity及自定义WAF规则

小编注:本文作者系FreeBuf专栏作者 @碳机体 美眉,目前她的研究方向主攻云防火墙。对文章内容有不清楚的可以直接评论区中留言,注意秩序和素质。 虽然VPS使...

36080
来自专栏游戏开发那些事

【Linux/unix网络编程】之使用socket进行TCP编程

循环接收客户发来的信息并在终端上显示,同时在信息前加入序号并返回给客户端;当从客户接收到bye后不再发送给各户并退出程序。

11230

扫码关注云+社区

领取腾讯云代金券