前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上利用PacketBit和ELK收集基础设施指标

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

原创
作者头像
姚啊姚
发布2018-08-13 15:47:26
8350
发布2018-08-13 15:47:26
举报

介绍

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服务器:

代码语言: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
复制
Output
{"acknowledged":true}

现在您的elk服务器已经准备好接受Packetbeat中的数据了,让我们在客户端服务器上设置shipper。

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

要设置Packetbeatshipper,您需要将您在准备中创建的SSL证书转到客户端服务器。需要在客户端服务器和ELK服务器之间建立通信。

找到客户端服务器的IP地址。然后 在你的ELK服务器上 ,将ssl证书复制到客户端服务器。scp指令:

代码语言: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。在客户端服务器上,运行以下命令将Elasticearch公共GPG密钥导入rpm:

代码语言:javascript
复制
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

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

代码语言:javascript
复制
sudo vi /etc/yum.repos.d/elastic-beats.repo

将下列行添加到文件中:

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

代码语言:javascript
复制
[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包:

代码语言:javascript
复制
sudo yum update
sudo yum -y install packetbeat

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

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

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

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

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

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

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

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

packetbeat.yml

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

packetbeat.yml

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

从这里开始删除:

packetbeat.yml

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

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

packetbeat.yml

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

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

packetbeat.yml

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

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

将Packetbeat配置成使用我们从ELK服务器复制的证书。否则,客户端将无法建立连接。

如果您想要再次检查您的配置文件,请将您的配置文件与本例进行比较,该示例忽略了大多数不必要的注释,以提高可读性:

packetbeat.yml

代码语言: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 systemctl start packetbeat

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

代码语言:javascript
复制
sudo systemctl enable packetbeat

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

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

第四步-测试Packetbeat安装

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

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

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

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

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

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步-在Elasticearch中加载Packetbeat索引模板
  • 第二步-在客户端服务器上设置Packetbeat
  • 第三步-在客户端上配置Packetbeat
  • 第四步-测试Packetbeat安装
  • 第五步-使用Kibana将数据可视化
  • 结语
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档