Beats入門簡介

使用Beat收集nginx日志和指標數據

項目需求

Nginx是一款非常優秀的web服務器,往往nginx服務會作為項目的訪問入口,那么,nginx的性能保障就變得非常重要了,如果nginx的運行出現了問題就會對項目有較大的影響,所以,我們需要對nginx的運行有監控措施,實時掌握nginx的運行情況,那就需要收集nginx的運行指標和分析nginx的運行日志了。

業務流程

image-20200924081614472

說明:

  • 通過Beats采集Nginx的指標數據和日志數據
  • Beats采集到數據后發送到Elasticsearch中
  • Kibana讀取數據進行分析
  • 用戶通過Kibana進行查看分析報表

部署Nginx

部署教程可以參考這篇博客:CentOS下如何安裝Nginx?

部署完成后,我們就可以啟動nginx了

啟動完成后,我們通過下面命令,就可以獲取到nginx中的內容了

tail -f /var/log/nginx/access.log

Beats簡介

通過查看ElasticStack可以發現,Beats主要用于采集數據

官網地址:https://www.elastic.co/cn/beats/

image-20200924091657242

Beats平臺其實是一個輕量性數據采集器,通過集合多種單一用途的采集器,從成百上千臺機器中向Logstash或ElasticSearch中發送數據。

image-20200924091716757

通過Beats包含以下的數據采集功能

  • Filebeat:采集日志文件
  • Metricbeat:采集指標
  • Packetbeat:采集網絡數據

image-20200924092015934

如果我們的數據不需要任何處理,那么就可以直接發送到ElasticSearch中

如果們的數據需要經過一些處理的話,那么就可以發送到Logstash中,然后處理完成后,在發送到ElasticSearch

最后在通過Kibana對我們的數據進行一系列的可視化展示

image-20200924092348121

Filebeat

介紹

Filebeat是一個輕量級的日志采集器

image-20200924092551044

為什么要用Filebeat?

當你面對成百上千、甚至成千上萬的服務器、虛擬機和溶氣氣生成的日志時,請告別SSH吧!Filebeat將為你提供一種輕量型方法,用于轉發和匯總日志與文件,讓簡單的事情不再繁華,關于Filebeat的記住以下兩點:

  • 輕量級日志采集器
  • 輸送至ElasticSearch或者Logstash,在Kibana中實現可視化

架構

用于監控、收集服務器日志文件.

image-20200924092749077

流程如下:

  • 首先是input輸入,我們可以指定多個數據輸入源,然后通過通配符進行日志文件的匹配
  • 匹配到日志后,就會使用Harvester(收割機),將日志源源不斷的讀取到來
  • 然后收割機收割到的日志,就傳遞到Spooler(卷軸),然后卷軸就在將他們傳到對應的地方

下載

官網地址:https://www.elastic.co/cn/downloads/beats/filebeat

選中對應版本的Filebeat,我這里是Centos部署的,所以下載Linux版本

image-20200924093459418

下載后,我們上傳到服務器上,然后創建一個文件夾

# 創建文件夾
mkdir -p /soft/beats
# 解壓文件
tar -zxvf filebeat-7.9.1-linux-x86_64.tar.gz 
# 重命名
mv filebeat-7.9.1-linux-x86_64/ filebeat

然后我們進入到filebeat目錄下,創建對應的配置文件

# 進入文件夾
cd filebeats
# 創建配置文件
vim mogublog.yml

添加如下內容

filebeat.inputs: # filebeat input輸入
- type: stdin    # 標準輸入enabled: true  # 啟用標準輸入
setup.template.settings: index.number_of_shards: 3 # 指定下載數
output.console:  # 控制臺輸出pretty: true   # 啟用美化功能enable: true

啟動

在我們添加完配置文件后,我們就可以對filebeat進行啟動了

./filebeat -e -c mogublog.yml

image-20200924094825962

然后我們在控制臺輸入hello,就能看到我們會有一個json的輸出,是通過讀取到我們控制臺的內容后輸出的

image-20200924095032365

內容如下

{"@timestamp":"2019-01-12T12:50:03.585Z","@metadata":{ #元數據信息"beat":"filebeat","type":"doc","version":"6.5.4"},"source":"","offset":0,"message":"hello", #元數據信息"prospector":{"type":"stdin" #元數據信息},"input":{ #控制臺標準輸入"type":"stdin"},"beat":{  #beat版本以及主機信息"name":"itcast01","hostname":"ElasticStack","version":"6.5.4"},"host":{"name":"ElasticStack"}
}

讀取文件

我們需要再次創建一個文件,叫 mogublog-log.yml,然后在文件里添加如下內容

filebeat.inputs:
- type: logenabled: truepaths:- /soft/beats/logs/*.log
setup.template.settings:index.number_of_shards: 3
output.console:pretty: trueenable: true

添加完成后,我們在到下面目錄創建一個日志文件

# 創建文件夾
mkdir -p /soft/beats/logs# 進入文件夾
cd /soft/beats/logs# 追加內容
echo "hello" >> a.log

然后我們再次啟動filebeat

 ./filebeat -e -c mogublog-log.yml

能夠發現,它已經成功加載到了我們的日志文件 a.log

image-20200924095926036

同時我們還可以繼續往文件中追加內容

echo "are you ok ?" >> a.log

追加后,我們再次查看filebeat,也能看到剛剛我們追加的內容

image-20200924102409656

可以看出,已經檢測到日志文件有更新,立刻就會讀取到更新的內容,并且輸出到控制臺。

自定義字段

但我們的元數據沒辦法支撐我們的業務時,我們還可以自定義添加一些字段

filebeat.inputs:
- type: logenabled: truepaths:- /soft/beats/logs/*.logtags: ["web", "test"]  #添加自定義tag,便于后續的處理fields:  #添加自定義字段from: test-webfields_under_root: true #true為添加到根節點,false為添加到子節點中
setup.template.settings:index.number_of_shards: 3
output.console:pretty: trueenable: true

添加完成后,我們重啟 filebeat

./filebeat -e -c mogublog-log.yml

然后添加新的數據到 a.log中

echo "test-web" >> a.log

我們就可以看到字段在原來的基礎上,增加了兩個

image-20200924103323033

輸出到ElasticSearch

我們可以通過配置,將修改成如下所示

filebeat.inputs:
- type: logenabled: truepaths:- /soft/beats/logs/*.logtags: ["web", "test"]fields:from: test-webfields_under_root: false 
setup.template.settings:index.number_of_shards: 1
output.elasticsearch:hosts: ["127.0.0.1:9200"]

啟動成功后,我們就能看到它已經成功連接到了es了

image-20200924145624812

然后我們到剛剛的 logs文件夾向 a.log文件中添加內容

echo "hello mogublog" >> a.log

在ES中,我們可以看到,多出了一個 filebeat的索引庫

image-20200924145928050

然后我們瀏覽對應的數據,看看是否有插入的數據內容

image-20200924150500441

Filebeat工作原理

Filebeat主要由下面幾個組件組成: harvester、prospector 、input

harvester

  • 負責讀取單個文件的內容
  • harvester逐行讀取每個文件(一行一行讀取),并把這些內容發送到輸出
  • 每個文件啟動一個harvester,并且harvester負責打開和關閉這些文件,這就意味著harvester運行時文件描述符保持著打開的狀態。
  • 在harvester正在讀取文件內容的時候,文件被刪除或者重命名了,那么Filebeat就會續讀這個文件,這就會造成一個問題,就是只要負責這個文件的harvester沒用關閉,那么磁盤空間就不會被釋放,默認情況下,Filebeat保存問價你打開直到close_inactive到達

prospector

  • prospector負責管理harvester并找到所有要讀取的文件來源
  • 如果輸入類型為日志,則查找器將查找路徑匹配的所有文件,并為每個文件啟動一個harvester
  • Filebeat目前支持兩種prospector類型:log和stdin
  • Filebeat如何保持文件的狀態
    • Filebeat保存每個文件的狀態并經常將狀態刷新到磁盤上的注冊文件中
    • 該狀態用于記住harvester正在讀取的最后偏移量,并確保發送所有日志行。
    • 如果輸出(例如ElasticSearch或Logstash)無法訪問,Filebeat會跟蹤最后發送的行,并在輸出再次可以用時繼續讀取文件。
    • 在Filebeat運行時,每個prospector內存中也會保存的文件狀態信息,當重新啟動Filebat時,將使用注冊文件的數量來重建文件狀態,Filebeat將每個harvester在從保存的最后偏移量繼續讀取
    • 文件狀態記錄在data/registry文件中

input

  • 一個input負責管理harvester,并找到所有要讀取的源
  • 如果input類型是log,則input查找驅動器上與已定義的glob路徑匹配的所有文件,并為每個文件啟動一個harvester
  • 每個input都在自己的Go例程中運行
  • 下面的例子配置Filebeat從所有匹配指定的glob模式的文件中讀取行
filebeat.inputs:
- type: logpaths:- /var/log/*.log- /var/path2/*.log

啟動命令

./filebeat -e -c mogublog-es.yml
./filebeat -e -c mogublog-es.yml -d "publish"

參數說明

  • **-e:**輸出到標準輸出,默認輸出到syslog和logs下
  • **-c:**指定配置文件
  • **-d:**輸出debug信息

讀取Nginx中的配置文件

我們需要創建一個 mogublog-nginx.yml配置文件

filebeat.inputs:
- type: logenabled: truepaths:- /soft/nginx/*.logtags: ["nginx"]fields_under_root: false 
setup.template.settings:index.number_of_shards: 1
output.elasticsearch:hosts: ["127.0.0.1:9200"]

啟動后,可以在Elasticsearch中看到索引以及查看數據

image-20200924161739842

可以看到,在message中已經獲取到了nginx的日志,但是,內容并沒有經過處理,只是讀取到原數據,那么對于我們后期的操作是不利的,有辦法解決嗎?

image-20200924161814066

Module

前面要想實現日志數據的讀取以及處理都是自己手動配置的,其實,在Filebeat中,有大量的Module,可以簡化我們的配置,直接就可以使用,如下:

./filebeat modules list

得到的列表如下所示

Disabled:
activemq
apache
auditd
aws
azure
barracuda
bluecoat
cef
checkpoint
cisco
coredns
crowdstrike
cylance
elasticsearch
envoyproxy
f5
fortinet
googlecloud
gsuite
haproxy
ibmmq
icinga
iis
imperva
infoblox
iptables
juniper
kafka
kibana
logstash
microsoft
misp
mongodb
mssql
mysql
nats
netflow
netscout
nginx
o365
okta
osquery
panw
postgresql
rabbitmq
radware
redis
santa
sonicwall
sophos
squid
suricata
system
tomcat
traefik
zeek
zscaler

可以看到,內置了很多的module,但是都沒有啟用,如果需要啟用需要進行enable操作:

#啟動
./filebeat modules enable nginx 
#禁用
./filebeat modules disable nginx

可以發現,nginx的module已經被啟用。

nginx module 配置

我們到下面的目錄,就能看到module的配置了

# 進入到module目錄
cd modules.d/
#查看文件
vim nginx.yml.disabled

得到的文件內容如下所示

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.9/filebeat-module-nginx.html- module: nginx# Access logsaccess:enabled: true# 添加日志文件var.paths: ["/var/log/nginx/access.log*"]# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.#var.paths:# Error logserror:enabled: truevar.paths: ["/var/log/nginx/error.log*"]

配置filebeat

我們需要修改剛剛的mogublog-nginx.yml文件,然后添加到我們的module

filebeat.inputs:
setup.template.settings:index.number_of_shards: 1
output.elasticsearch:hosts: ["127.0.0.1:9200"]
filebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false

測試

我們啟動我們的filebeat

./filebeat -e -c itcast-nginx.yml

如果啟動的時候發現出錯了,錯誤如下所示,執行如圖所示的腳本即可 【新版本的ES好像不會出現這個錯誤】

#啟動會出錯,如下
ERROR fileset/factory.go:142 Error loading pipeline: Error loading pipeline for
fileset nginx/access: This module requires the following Elasticsearch plugins:
ingest-user-agent, ingest-geoip. You can install them by running the following
commands on all the Elasticsearch nodes:sudo bin/elasticsearch-plugin install ingest-user-agentsudo bin/elasticsearch-plugin install ingest-geoip

啟動成功后,能看到日志記錄已經成功刷新進去了

image-20200924164750123

我們可以測試一下,刷新nginx頁面,或者向錯誤日志中,插入數據

echo "err" >> error.log

能夠看到,剛剛的記錄已經成功插入了

image-20200924164927557

關于module的其它使用,可以參考文檔:

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html

Metricbeat

image-20200924170741928

  • 定期收集操作系統或應用服務的指標數據
  • 存儲到Elasticsearch中,進行實時分析

Metricbeat組成

Metricbeat有2部分組成,一部分是Module,另一個部分為Metricset

  • Module
    • 收集的對象:如 MySQL、Redis、Nginx、操作系統等
  • Metricset
    • 收集指標的集合:如 cpu、memory,network等

以Redis Module為例:

image-20200924170958343

下載

首先我們到官網,找到Metricbeat進行下載

image-20200924171232384

下載完成后,我們通過xftp工具,移動到指定的目錄下

# 移動到該目錄下
cd /soft/beats
# 解壓文件
tar -zxvf 
# 修改文件名
mv  metricbeat

然后修改配置文件

vim metricbeat.yml

添加如下內容

metricbeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false
setup.template.settings:index.number_of_shards: 1index.codec: best_compression
setup.kibana:
output.elasticsearch:hosts: [""127.0.0.1:9200"]
processors:- add_host_metadata: ~- add_cloud_metadata: ~

默認會指定的配置文件,就是在

${path.config}/modules.d/*.yml

也就是 system.yml文件,我們也可以自行開啟其它的收集

啟動

在配置完成后,我們通過如下命令啟動即可

./metricbeat -e

在ELasticsearch中可以看到,系統的一些指標數據已經寫入進去了:

image-20200924171839291

system module配置

- module: systemperiod: 10s  # 采集的頻率,每10秒采集一次metricsets:  # 采集的內容- cpu- load- memory- network- process- process_summary

Metricbeat Module

Metricbeat Module的用法和我們之前學的filebeat的用法差不多

#查看列表
./metricbeat modules list

能夠看到對應的列表

Enabled:
system #默認啟用Disabled:
aerospike
apache
ceph
couchbase
docker
dropwizard
elasticsearch
envoyproxy
etcd
golang
graphite
haproxy
http
jolokia
kafka
kibana
kubernetes
kvm
logstash
memcached
mongodb
munin
mysql
nginx
php_fpm
postgresql
prometheus
rabbitmq
redis
traefik
uwsgi
vsphere
windows

Nginx Module

開啟Nginx Module

在nginx中,需要開啟狀態查詢,才能查詢到指標數據。

#重新編譯nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make
make install./nginx -V #查詢版本信息
nginx version: nginx/1.11.6
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module#配置nginx
vim nginx.conf
location /nginx-status {stub_status on;access_log off;
}# 重啟nginx
./nginx -s reload

測試

image-20200924172317526

結果說明:

  • Active connections:正在處理的活動連接數
  • server accepts handled requests
    • 第一個 server 表示Nginx啟動到現在共處理了9個連接
    • 第二個 accepts 表示Nginx啟動到現在共成功創建 9 次握手
    • 第三個 handled requests 表示總共處理了 21 次請求
    • 請求丟失數 = 握手數 - 連接數 ,可以看出目前為止沒有丟失請求
  • Reading: 0 Writing: 1 Waiting: 1
    • Reading:Nginx 讀取到客戶端的 Header 信息數
    • Writing:Nginx 返回給客戶端 Header 信息數
    • Waiting:Nginx 已經處理完正在等候下一次請求指令的駐留鏈接(開啟keep-alive的情況下,這個值等于 Active - (Reading+Writing))

配置nginx module

#啟用redis module
./metricbeat modules enable nginx#修改redis module配置
vim modules.d/nginx.yml

然后修改下面的信息

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/6.5/metricbeat-modulenginx.
html- module: nginx
#metricsets:
# - stubstatusperiod: 10s
# Nginx hostshosts: ["http://127.0.0.1"]
# Path to server status. Default server-statusserver_status_path: "nginx-status"
#username: "user"
#password: "secret"

修改完成后,啟動nginx

#啟動
./metricbeat -e

測試

我們能看到,我們的nginx數據已經成功的采集到我們的系統中了

image-20200924173058267

可以看到,nginx的指標數據已經寫入到了Elasticsearch。

更多的Module使用參見官方文檔:

https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html

參考

Filebeat 模塊與配置

Elastic Stack(ELK)從入門到實踐

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455054.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP-curl

//初始化$curl curl_init();//設置抓取的urlcurl_setopt($curl, CURLOPT_URL, http://www.baidu.com);//設置頭文件的信息作為數據流輸出curl_setopt($curl, CURLOPT_HEADER, 1);//設置獲取的信息以文件流的形式返回,而不是直接輸出。curl_setopt($curl, CURLOPT_R…

MPlayer開發

一、介紹 不論是音頻數據還是視頻數據,我都為MPlayer項目開發過一些開源的解碼器。因此我個人認為我有資格寫一篇文檔來介紹如何開發新的編解碼器。 學習如何添加一個新的編解碼器的最好方法通常是學習大量的已有代碼。本文檔僅僅是對代碼的一個補充&#x…

可編程led燈帶原理_SCPSD-250-04-27派克真空壓力傳感器故障和工作原理

SCPSD-250-04-27派克PARKER真空壓力傳感器故障和工作原理PARKER壓力開關現貨 PARKER壓力傳感器特價 派克真空壓力傳感器 PARKER數字壓力開關2020年還剩最后2天了,這一年大家都過得不太容易,尤其是我自己這是30年以來過得最艱難的一年,經…

總結面試時沒有回答上的內存對齊問題

前兩天面試某公司時,沒有回答上的一個問題,總結如下,以供參考。 問:下面這個結構類型的實例變量占用多少內存: struct struct1 { int i; short j; char c; }; 我反問:是啥語言啥機器啥編譯環境…

Kibana入門安裝與介紹

Kibana入門 Kibana 是一款開源的數據分析和可視化平臺,它是 Elastic Stack 成員之一,設計用于和 Elasticsearch 協作。您可以使用 Kibana 對 Elasticsearch 索引中的數據進行搜索、查看、交互操作。您可以很方便的利用圖表、表格及地圖對數據進行多元化…

友善串口工具接收數據隨機換行_使用Python3+PyQT5+Pyserial 實現簡單的串口工具方法...

練手項目,先上圖先實現一個簡單的串口工具,為之后的上位機做準備代碼如下:pyserial_demo.pyimport sys import serial import serial.tools.list_ports from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMessageBox from PyQt5.QtC…

Vue渲染函數

前面的話 Vue 推薦在絕大多數情況下使用 template 來創建HTML。然而在一些場景中,真的需要 JavaScript 的完全編程的能力,這就是 render 函數,它比 template 更接近編譯器。本文將詳細介紹Vue渲染函數 引入 下面是一個例子,如果要…

數據綁定原理

一、數據單向綁定原理指先把模板寫好,然后把模板和數據(數據可能來自后臺)整合到一起形成HTML代碼,最后把這段HTML代碼插入到文檔流里。缺點:一旦HTML代碼生成就沒有辦法改變,如果有新數據重新傳入,就必須重新把模板和…

視頻解碼優化

以下通過剖析一些經驗來了解視頻解碼優化 1. 在嵌入式系統中實現MPEG4的視頻解碼 有兩種方法可行 (1)采用ffmpeg(mplayer 的核心就是采用ffmpeg),然后對ffmpeg mp4解碼優化 1).對IDCT匯編化,并優化VLD的實現 ->inline&匯編化 2).根據ARM9 cache&cache…

Logstash入門簡介

Logstash入門簡介 介紹 Logstash是一個開源的服務器端數據處理管道,能夠同時從多個來源采集數據,轉換數據,然后將數據發送到最喜歡的存儲庫中(我們的存儲庫當然是ElasticSearch) 我們回到我們ElasticStack的架構圖&a…

Django templates 和 urls 拆分

如果在Django項目 下面新建了blog和polls兩個APP應用,在每個APP下面都各自新建自己的url和templates,那么我們需要如何進行項目配置呢? INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, dja…

springboot怎么殺進程_線上服務平均響應時間太長,怎么排查?

線上服務平均響應時間太長,怎么排查?https://xie.infoq.cn/article/914b5c56000a3880016abd8d6前言:最近線上環境某個接口服務響應時間偏長,導致用戶體驗超差,那平時該怎么快速的排查這類問題呢?①、為代碼…

Redis學習第五課:Redis Set類型及操作

Set是集合,它是string類型的無序集合。set是通過hash table實現的,添加、刪除和查找的復雜度都是O(1)。 對集合我們可以取并集、交集、差集。通過這些操作我們可以實現SNS中的好友推薦和blog的tag功能。 Set集合操作: sadd:向名稱為Key的set中…

MPEG音視頻編解碼之MP3編解碼概述

2 MP3編解碼原理 2.1 MP3音頻壓縮標準概述 MP3全稱是動態影像專家壓縮標準音頻層面3(Moving Picture Experts Group Audio Layer III)。是當今較流行的一種數字音頻編碼和有損壓縮格式,它設計用來大幅度地降低音頻數據量,而對于…

Python實現GitBook工具

寫在前面 本工具是通過Python腳本實現 GitBook 自動 生成 執行 編譯 發布的功能 你可以在這里下載exe 使用 1. exe下載,并移動位置 將exe文件放在你的gitbook文件夾中,或者放在空文件夾中 2. file.md 創建 名為file.md的文件,在你要寫book的目錄下 注意: 這里file.md文件名…

shell腳本中用到的條件和循環語句

本博文介紹一下shell腳本中常用的條件和循環語句:條件語句:循環語句:示例:if語句:eg1.eg2.2.case語句:簡單的case語句:配合循環的case語句:3.for語句:簡單的for語句&…

BZOJ 2243 染色(樹鏈剖分好題)

2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 7971 Solved: 2990[Submit][Status][Discuss] Description 給定一棵有n個節點的無根樹和m個操作,操作有2類: 1、將節點a到節點b路徑上所有點都染成顏色c; 2、詢問…

processing動態代碼大全_做一張動態海報需要多少步?

人們習慣性地把程序員跟設計師分成兩種不同性質的人,好像程序員就不會有美感,設計師邏輯思維就一定會很弱,但最近幾年我們發現越來越多的程序員學設計,設計師學編程的跨界故事。新媒體藝術家,邱偉豪也是其中一員&#…

【ffmpeg for wince】音視頻編解碼多平臺移植(for window/wince)

from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html 終于完成了了第二個Client side原型(for Wince),其中花掉我最多時間的就是ffmpeg的對WINCE的移植。其中有大半時間是由于網上的一些不完整及不正確信息所誤導,…

python實現猴子爬山算法

猴子爬山一只頑猴在一座有N級臺階的小山上爬山跳躍。上山時需從山腳至山頂往上跳N級臺階&#xff0c;一步可跳1級&#xff0c;或跳3級&#xff0c;求上山有多少種不同的跳法&#xff1f; &#xff08;N<50&#xff09; 問題分析: 每一次都可以選擇1,2,3有3種跳法 方法1 直…