介绍
Packetbeat允许您监控HTTP和MySQL等应用程序级协议以及DNS和其他服务的实时网络流量。
为此,您可以在客户端计算机上配置称为“发货人”的代理,这些代理会嗅探和解析网络流量并将消息映射到事务。然后,这些托运人为每个操作生成记录并将其发送到Elasticsearch或Logstash。获得数据后,您可以使用Kibana搜索,分析和可视化数据,以便您可以对基础架构做出明智的决策或解决问题。
在本教程中,您将配置和使用带有ELK堆栈的Packetbeat来收集和可视化基础架构指标。
sudo
命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)sudo
权限。因为我们计划使用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
如果模板已成功加载,您将看到输出。
{"acknowledged":true}
现在您的ELK服务器已准备好接受来自Packetbeat的数据,让我们在客户端服务器上设置发货人。
要设置Packetbeat发货人,您需要将在先决条件教程中创建的SSL证书提取到客户端服务器。需要在客户端服务器和ELK服务器之间建立通信。
找到客户端服务器的IP地址。然后,在ELK服务器上,使用以下scp
命令将SSL证书复制到客户端服务器:
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
如果您以前安装过托运人,则此文件可能已包含以下行:
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现已安装,但需要先配置才能使用它。
Packetbeat需要知道要记录什么以及将数据发送到何处。让我们将其配置为连接到我们的ELK服务器上的Logstash,并定义我们希望它观看的流量类型。我们将通过修改Packetbeat附带的默认配置文件来实现。
在客户端服务器上,编辑Packetbeat配置文件:
sudo nano /etc/packetbeat/packetbeat.yml
注意: Packetbeat的配置文件是YAML格式,这意味着缩进非常重要!请务必使用这些说明中指示的相同数量的空格。
在文件顶部附近,您将看到该input
部分,您可以在其中指定应将哪些指标和统计信息发送到ELK服务器。我们将使用默认输入设置,但您可以随意更改它以满足您的需求。
选择要从中捕获流量的网络接口。在Linux上,Packetbeat支持捕获安装了Packetbeat的服务器发送或接收的所有消息。为此,请用any
作设备:
# 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可以找到每个协议的端口。如果您使用任何非标准端口,请在此处添加。否则,默认值应该没问题。
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地址。配置文件的部分应如下所示:
### 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"]
:
tls:
# List of root certificates for HTTPS server verifications
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
这会将Packetbeat配置为使用我们从ELK服务器复制的证书。没有这个,客户端将无法建立连接。
如果要仔细检查配置文件,请将您的配置与此示例进行比较,该示例省略了大部分不必要的注释以提高可读性:
############################# 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。让我们看看它是否有效。
此时,客户端服务器上的Packetbeat应将您的网络流量日志发送到ELK服务器上的Logstash。Logstash应该在一个名为packetbeat-YYYY.MM.DD
的日期戳记索引中将Packetbeat数据加载到Elasticsearch中 。让我们通过在客户端计算机上创建一个简单的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'
你应该看到一堆看起来像这样的输出:
{
"_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查看网络流量的一些图表和图形。
当您在要收集系统统计信息的所有服务器上完成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 删除。