如何在CentOS 7上使用Packetbeat和ELK收集基础结构指标

介绍

Packetbeat允许您监视应用级协议(如HTTP和MySQL)以及DNS和其他服务的实时网络流量。 要执行此操作,请在客户端计算机上配置代理,称为“发货人”,它嗅探和解析网络流量并将消息映射到事务。然后,这些发货人为每个操作生成记录,并将其发送到Elasticsearch或Logstash。获得数据后,您可以使用Kibana搜索,分析和可视化数据,以便您能够就基础设施做出明智的决策或排查问题。 在本教程中,您将配置并使用带有ELK堆栈的Packetbeat来收集和可视化基础架构指标。

实验要求

一个具有4GB内存的CentOS 7服务器,配置了如何在CentOS 7上安装Elasticsearch,Logstash和Kibana教程中描述的ELK堆栈设置。按照教程配置ELK堆栈并安装Kibana仪表板,但不要配置任何客户端机器。 一个CentOS 7服务器具有任何数量的RAM,将作为客户端机器。 每个服务器具有sudo权限的标准用户帐户。您可以通过使用CentOS7教程的初始服务器设置来设置标准帐户。

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

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

  • 首先,登录到您的ELK服务器:
[root@prod-elk src]# cd /usr/local/src/
[root@prod-elk src]# curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 46323  100 46323    0     0  56622      0 --:--:-- --:--:-- --:--:-- 56698
  • 然后使用此命令加载模板:
curl -XPUT 'http://192.168.1.133:9200/_template/packetbeat' -d@packetbeat.template-es2x.json
  • 如果模板已成功加载,您将看到输出。
{"acknowledged":true}

ELK服务器已准备好接受来自Packetbeat的数据,在客户端服务器上设置发货人(shipper )。

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

要设置Packetbeat发运器,您需要获取在必要教程中创建的SSL证书到客户端服务器。需要在客户端服务器和ELK服务器之间建立通信。 查找客户端服务器的IP地址。然后,在您的ELK服务器上,使用scp命令将SSL证书复制到客户端服务器:

scp /etc/pki/tls/certs/logstash-forwarder.crt 192.168.1.158:/usr/local/src/
  • 登录到客户端服务器
[root@prod-elk src]# ssh 192.168.1.158
root@192.168.1.158's password: 
Last login: Wed Jan 11 17:02:30 2017 from 192.168.0.110

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

[root@linuxprobe ~]# sudo mkdir -p /etc/pki/tls/certs
[root@linuxprobe ~]# sudo cp /usr/local/src/logstash-forwarder.crt /etc/pki/tls/cert

接下来,我们需要安装Packetbeat本身。在客户端服务器上,运行以下命令将Elasticsearch公用GPG密钥导入rpm:

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

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

echo '[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
' | sudo tee /etc/yum.repos.d/elastic-beats.repo
  • 安装Packetbeat软件包
yum makecache && yum install packetbeat -y

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

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

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

  • 在客户端服务器上,编辑Packetbeat配置文件:
sudo vi /etc/packetbeat/packetbeat.yml

在文件顶部附近,您将看到输入部分,您可以在其中指定应将哪些指标和统计信息发送到ELK服务器。我们将使用默认的输入设置,但随时更改它以适应您的需要。 选择从中捕获流量的网络接口。在Linux上,Packetbeat支持捕获由安装了Packetbeat的服务器发送或接收的所有消息。为此,使用任何作为设备:

egrep -v "#|^$" /etc/packetbeat/packetbeat.yml 
interfaces:
  device: any
protocols:
  dns:
    ports: [53]
    include_authorities: true
    include_additionals: true
  http:
    ports: [80, 8080, 8000, 5000, 8002]
  memcache:
    ports: [11211]
  mysql:
    ports: [3306]
  pgsql:
    ports: [5432]
  redis:
    ports: [6379]
  thrift:
    ports: [9090]
  mongodb:
    ports: [27017]
output:
  elasticsearch:
    hosts: ["192.168.1.133:9200"]
    worker: 1
    index: "packetbeat"
shipper:
  name: prod-shipper
logging:
  files:
    path: /var/log/beat
    name: beat
    keepfiles: 7
  level: info

现在启动Packetbeat将您的更改放置到位: 注:原本计划把收集的日志通过logstash然后在传给elasticsearch,使用logstash认证时报错,就暂时直接把日志传输到elasticsearch。

步骤4 - 测试Packetbeat安装

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

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

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

显示如下:

curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'
{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 90,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "packetbeat-2017.01.12",
        "_type" : "dns",
        "_id" : "AVmRubj_g1guHDTwPD6h",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2017-01-12T08:10:01.993Z",
          "beat" : {
            "hostname" : "linuxprobe",
            "name" : "prod-shipper"
          },
          "bytes_in" : 30,
          "bytes_out" : 94,
          "client_ip" : "192.168.1.158",
          "client_port" : 58607,
          "client_proc" : "",
          "client_server" : "",
          "count" : 1,
          "direction" : "out",
          "dns" : {
            "additionals_count" : 0,
            "answers" : [
              {
                "class" : "IN",
                "data" : "173.255.215.209",
                "name" : "pool.ntp.org",
                "ttl" : 99,
                "type" : "A"
              },
              {
                "class" : "IN",
                "data" : "5.79.108.34",
                "name" : "pool.ntp.org",
                "ttl" : 99,
                "type" : "A"
              },
              {
                "class" : "IN",
                "data" : "61.216.153.106",
                "name" : "pool.ntp.org",
                "ttl" : 99,
                "type" : "A"
              },
              {
                "class" : "IN",
                "data" : "138.68.2.126",
                "name" : "pool.ntp.org",
                "ttl" : 99,
                "type" : "A"
              }
            ],
            "answers_count" : 4,
            "authorities_count" : 0,
            "flags" : {
              "authoritative" : false,
              "recursion_allowed" : true,
              "recursion_desired" : true,
              "truncated_response" : false
            },
            "id" : 26528,
            "op_code" : "QUERY",
            "question" : {
              "class" : "IN",
              "name" : "pool.ntp.org",
              "type" : "A"
            },
            "response_code" : "NOERROR"
          },
          "ip" : "114.114.114.114",
          "method" : "QUERY",
          "port" : 53,
          "proc" : "",
          "query" : "class IN, type A, pool.ntp.org",
          "resource" : "pool.ntp.org",
          "responsetime" : 97,
          "server" : "",
          "status" : "OK",
          "transport" : "udp",
          "type" : "dns"
        }
      },

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

第5步 - 用Kibana可视化数据

当您在要收集系统统计信息的所有服务器上完成Packetbeat设置后,让我们看看Kibana。 在Web浏览器中,转到您的ELK服务器的域名或公共IP地址。输入您的ELK服务器凭据后,您应该会看到您的Kibana Discover页面。

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

从这里,您可以通过过滤可用字段查看您的各种Packetbeat条目。您可以单击这些字段来添加它们,或使用聚合(计数,总和,最小值,最大值,中值等)来可视化它们。 Kibana还提供了广泛的可视化,您可以用它来分析数据。单击屏幕顶部的“可视化”选项卡以列出可视化对象或打开已保存的可视化对象。 Kibana官方文档: https://www.elastic.co/guide/en/kibana/current/index.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

SQL Server 数据库清除日志的方法

SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件 方法一: 1、打开查询分析器,输入命令 BACKUP LOG d...

2795
来自专栏乐沙弥的世界

调整联机重做日志大小(change redo log size)

      Oracle 联机日志加上Oracle归档日志记录了整个数据库完整的变更信息。是Oracle体系结构中的重要组成部分。因此联机日志的规划也相当重要。...

703
来自专栏逍遥剑客的游戏开发

Nebula3的Input系统

1826
来自专栏小樱的经验随笔

CTF---Web入门第四题 Forms

Forms分值:10 来源: Ph0enix 难度:易 参与人数:4945人 Get Flag:2776人 答题人数:2824人 解题通过率:98% 似乎有...

29411
来自专栏吴生的专栏

MySQL 慢查询日志

MySQL有一种日志,叫做慢查询日志,主要就是用来记录一些耗时的查询操 作。通过这个日志我们就可以分析出哪些的操作是影响性能的,我们需要对其 进行一些优化措施。

1911
来自专栏杂七杂八

pycharm 添加2to3 autopep8

2to3可以很方便的将python2的代码转换为3的代码,是python自带的一个功能,而pep8是python编写规范,它可以使代码更加规范具有可读性

511
来自专栏极客编程

用Java为Hyperledger Fabric(超级账本)开发区块链智能合约链代码之部署与运行示例代码

您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperled...

421
来自专栏王硕

原 PostgreSQL基于时间点恢复(PITR)实验记录

3459
来自专栏乐沙弥的世界

MySQL [ERROR] Table 'mysql.user' doesn't exist

    一次源码新装的mysql,由于没有复制my-default.cnf到/etc/my.cnf位置,在启动mysql的时候碰到了无法打开mysql.user...

1063
来自专栏运维小白

13.3 mysql常用命令

mysql常用命令目录概要 查询库 show databases; 切换库 use mysql; 查看库里的表 show tables; 查看表里的字段 des...

1898

扫码关注云+社区