開發與維運

Monitoring 及 Central Management – Elastic Stack 實戰手冊

作者:高鼕鼕

Monitoring

Monitoring 就是跟蹤和監控 Elastic Stack 各個組件的實時運行狀況和性能指標;當監控一個集群時,不僅要採集 Elasticsearch 節點的指標,而且要採集集群相關的 Logstash 節點,Kibana 實例以及各種 Beats 節點的性能指標甚至還要通過 Filebeat 採集集群日誌,存儲在 Elasticsearch 集群中,以便可以通過 Kibana 可視化,實時監控各種組件和節點的實時運行狀態。

兩種監控方案

  • 組件自身監控
  • Metricbeat 監控

組件自身監控

開啟快捷簡單,無需額外組件,收集採集指標會佔用組件自身資源;

默認情況下,每一個 Elastic Stack 組件自身都包含一個內置的 agent 負責採集數據

配置方式

Elasticsearch

在 Elasticsearch 集群中監控採集配置默認關閉的 xpack.monitoring.collection.enabled : false

  1. 通過 Kibana 開啟
  • 打開 Kibana
  • 進入 Management-->Stack Monitoring
  • 點擊 Turn on monitoring

  1. 通過 API 開啟
GET _cluster/settings
PUT _cluster/settings
{
  "persistent": {
    "xpack.monitoring.collection.enabled": true
  }
}
  1. Elasticsearch 的其他配置

在節點的配置文件 elasticsearch.yml 更多配置

xpack.monitoring.collection.indices 指定要監控的索引名,默認是監控所有的,指定 The indices to collect data from. Defaults to all indices, but can be a comma-separated list.
xpack.monitoring.collection.interval 數據採集頻率,默認是 10s How often data samples are collected.Defaults to 10s
xpack.monitoring.exporters 指標數據的存儲位置 ,默認存儲在自身集群,可以通過此配置指定遠端集群。 Configures where the agent stores monitoringdata. By default, the agent uses a localexporter that indexes monitoring data on thecluster where it is installed.

參考文獻:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/monitoring-settings.html

Kibana

在配置文件 kibana.yml 開啟

#是否開啟Kibana NodeJS server指標採集
monitoring.kibana.collection.enabled: true
#採集頻率(ms),默認10s
monitoring.kibana.collection.interval: 10000
#指定監控指標存儲遠程ES集群
monitoring.ui.elasticsearch.hosts: ["https://es1:9200", "https://es2:9200"]
#遠程ES集群的賬號和密碼
monitoring.ui.elasticsearch.username: elasticsearch
monitoring.ui.elasticsearch.password: changeme
#控制monitoring後端的運行和kibana運行狀態的監控
monitoring.enabled: true
#在kibana中隱藏Stack Monitoring功能。
monitoring.ui.enabled: true

參考文檔:https://www.elastic.co/guide/en/kibana/7.10/monitoring-settings-kb.html#monitoring-general-settings

Logstash

在配置文件 logstash.yml 開啟

# X-Pack Monitoring
# https://www.elastic.co/guide/en/logstash/current/monitoring-logstash.html
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["https://es1:9200", "https://es2:9200"]
xpack.monitoring.elasticsearch.username: elasticsearch
xpack.monitoring.elasticsearch.password: password

Beats:Filebeat、Metricbeat

在配置文件 filebeat.yml 或 metricbeat.yml 中開啟

monitoring.enabled: true
#monitoring.cluster_uuid:
monitoring.elasticsearch.hosts: ["https://es1:9200"]
monitoring.elasticsearch.username: filebeat_system
monitoring.elasticsearch.password: password

APM

在配置文件 apm-server.yml 中開啟

monitoring.enabled: true
monitoring.elasticsearch.hosts: ["https://es1:9200"]
monitoring.elasticsearch.username: filebeat_system
monitoring.elasticsearch.password: password

從某種程度上講 AMP Server 其實就是另外一種 Beat。對於它的監控和 Beats 完全是一樣的。

Metricbeat 監控

使用 Metricbeat 採集 Elastic Stack 監控指標,需單獨部署監控 Metricbeat 及單獨的監控集群。開啟對應的 metricbeat modules,避免由於採集數據對組件自身帶來壓力,而影響組件運行性能。

監控方案

可用來監控 Elastic Stack 的所有類型組件

  • 未來版本中默認的監控方案
  • 採集性能比內置採集更好

配置方式

注意在 6.5 版本以及以後,才可以通過 Metricbeat 採集 Elasticsearch 監控指標,並可指定專用的監控集群。

  1. 開啟監控數據採集

在生產集群中 xpack.monitoring.collection.enabled 默認為 false,可以通過以下 API 進行開啟和關閉。針對 Metricbeat 監控,這個設置應為 false。

GET _cluster/settings

PUT _cluster/settings
{
  "persistent": {
    "xpack.monitoring.collection.enabled": false
  }
  "transient" : { }
}
  1. 在生產集群的每個 node 上安裝 Metricbeat, 保證每個 node 都安裝
  2. 在每個 Elasticsearch node 的 Metricbeat 上開啟 Elasticsearch X-Pack module
metricbeat modules enable elasticsearch-xpack
  1. 在每個 Elasticsearch node 上配置 Elasticsearch X-Pack module
- module: elasticsearch
    xpack.enabled: true
    period: 10s
    hosts: ["http://localhost:9200"]
  1. 指定監控數據存儲的集群

在 Metricbeat 的配置文件(metricbeat.yml)中配置 Elasticsearch output 信息。

output.elasticsearch:
  hosts: ["http://es-mon-1:9200", "http://es-mon-2:9200"] 
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"
  1. 在每個 Elasticsearch node 節點啟動 Metricbeat
nohup ./metricbeat -c metricbeat.yml >/dev/null 2>&1 & 
  1. 關閉默認的 Elasticsearch 監控數據採集

在生產集群中配置 xpack.monitoring.elasticsearch.collection.enabled 為 false

通過以下 API 進行配置

PUT _cluster/settings
{
  "persistent": {
    "xpack.monitoring.elasticsearch.collection.enabled": false
  }
}
  1. 在監控集群的 Kibana 中查看監控頁面

參考文檔:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/monitoring-overview.html

專用的監控集群

在生產環境推薦部署專用的監控集群來實現集群的指責分離

  • 減少被監控的業務集群的負載和存儲壓力。
  • 防止被監控集群的故障影響監控功能。
  • 實現職責隔離,比如監控集群和業務集群可配置不同的安全策略,保障級別等。

統一監控UI

Monitoring 概覽

概覽頁面展示了所有正在被監控的 Elastic Stack 組件,包括但不限於 Elasticseach,Kibana,Beats,Logstash,APM 等等。

Elasticsearch監控

概覽頁面主要展示了四塊內容:

  1. 集群狀態

包括集群狀態,節點總數,索引總數,JVM 使用狀態,分片總數,未分配的分片數,索引文檔總數,存儲的數據總大小。

  1. 集群吞吐量

查詢 TPS,查詢耗時,索引 TPS 以及索引耗時等時序圖。

  1. 集群日誌列表。
  2. 活動分片遷移列表。

採集的 Elasticsearch 的監控數據包括:Cluster Stats,Index Stats, Index Recovery, Shards,Jobs, Node Stats 等等。

節點監控

主要包含節點列表,同時可以實時查看節點的告警數,在線狀態,分片數, 使用率,節點負載,JVM 使用情況以及當前節點空餘的存儲空間。

點擊節點名可以下鑽到更詳細全面的節點監控以及時序圖。

索引監控

主要包含索引列表,可以實時查看到當前索引的狀態,文檔數,索引大小,索引 TPS,搜索 TPS 以及未分配的分片數。

點擊索引名可下鑽到更詳細全面的索引監控以及時序圖。

Kibana 監控

在此頁面中可以監控到訪問 Kibana 的 client request 次數和 client 請求平均耗時的時序圖

點擊 Instances 還可以監控到所有 Kibana 實例列表以及當前運行狀況。

Beats 監控

統計 Beats 的告警數,Beats 總數,Metricbeat 數,總共生產的事件數和發送的事件字節數,

最近一天活躍的 Beats,Beats 類型的 Top5 以及 Beats 版本的 Top5

成功事件數/秒,失敗事件數/秒,平均的吞吐量 bytes/second,以及輸出失敗數/秒

Beats 實例監控

在實例下可以看到該集群監控到所有 Beats 列表和其運行狀態

點擊實例名可下鑽到更詳細全面的 Beats 實例監控以及時序圖。

Central Management

開發工具,包括一些可以方便用戶和集群中數據進行交互探索分析的工具

Console終端

使用 Elasticsearch 的 REST API 進行交互,包含發送請求和查看 API 文檔

如上圖所示,在 console 裡面執行類似 CRUL 的命令,點擊語句後面的➡️執行,即可在右側欄中實時查看結果;

  1. 支持 GET,PUT,POST,DELETE 四種命令;
  2. 支持包含寫入,搜索,集群,節點和索引狀態等等 Elasticsearch 相關的所有 API;
  3. 輸入命令行時,支持自動補全;
  4. 支持自動格式化(Auto indent);
  5. 支持查看 API 文檔(Open documention);
  6. 支持查看執行命令歷史記錄(點擊History);
  7. 設置 console 配置

  1. 關閉 console:

在 Kibana 的配置文件 kibana.yml 配置如下

console.enabled: false

然後重啟 Kibana 即可

查詢分析器

檢查並分析您的搜索查詢。

Elasticsearch 具有功能強大的 Profile API,可用於檢查和分析您的搜索查詢。響應返回一個較大的JSON Blob,可能很難手動對其進行分析。

Search Profiler 工具可以將此 JSON 輸出轉換為易於瀏覽的可視化文件,從而使您可以更快地診斷和調試效果不佳的查詢。

Query Profile

  • 頂級BooleanQuery組件和 query 中 bool 相對應。
  • 第二個BooleanQuery對應於條件查詢,該條件在內部轉換為一個Boolean 的 should 子句,它有兩個子查詢,分別與terms query中的 “sue” 和 “sally” 相對應。
  • TermQuery標有 “name:fred” 這是對應於 match: fred 在查詢中。

如圖你可以看到每一行的 Self time 和 Total time 都是不一樣的,Self time 表示查詢組件執行所需的時間。Total time 是查詢組件及其所有子組件執行所花費的時間。因此,諸如 Boolean queries 之類的查詢的總時間通常比 Self time 長。

Aggregation

點擊 Aggregation Profile 去查看聚合的性能統計信息,

選擇 shard 查看聚合詳細信息和時序分佈。

Grok調試器

在數據處理管道中使用 grok 模式之前,請先對其進行構建和調試。

您可以在 Kibana Grok 調試器中構建和調試 grok 模式, 然後再在數據處理管道中使用它們。Grok 是一種模式匹配語法,可用於解析任意文本並對其進行結構化。Grok 非常適合解析 syslog,apache 和其他 Web 服務器日誌,mysql 日誌,以及具備可讀性的任何日誌格式。

使用實例:

自定義模式:

如果默認的grok模式字典不包含你所需的模式,則可以使用Grok Debugger定義,測試和調試自定義模式。

Painless 實驗室

實時實驗和調試 Painless 腳本(beta功能)

此處不做過多的介紹。

採集管理

Logstash Pipelines管理

Logstash Pipelines 管理就是集中管理配置 Logstash pipeline,使其事件處理和結果調試可視化。

準備步驟如下:

  • 安裝對應版本的 Logstash(和 Elasticsearch 版本保持一致)
  • 開啟 Logstash 監控和集中管理
  • 創建 Logstash Pipeline
  • 驗證 Pipelines 集中管理

安裝 Logstash

#下載安裝包
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0-linux-x86_64.tar.gz
#解壓到指定目錄下
tar -zxvf logstash-7.10.0-linux-x86_64.tar.gz -C /opt/
#啟動安裝包
cd /opt/logstash-7.10.0
./bin/logstash
第一次啟動會啟動失敗,這個不用擔心,因為沒有對logstash進行任何配置。

開啟監控和集中管理

開啟 Logstash 監控的前提,請確保在 Elasticsearch 集群中啟動xpack.monitoring.collection.enabled : true

通過 Kibana 啟動方式如下:

設置 Logstash 監控

在配置文件 logstash.yml 添加如下配置

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "esTeam123456"
xpack.monitoring.elasticsearch.hosts: ["http://es-cn-6ja24dt4r007brz85.public.elasticsearch.aliyuncs.com:9200"]
xpack.monitoring.collection.interval: 10s
xpack.monitoring.collection.pipeline.details.enabled: true

設置 Logstash 集中管理

創建用於管理 Logstash 的用戶和角色

POST _xpack/security/role/logstash_writer
{
  "cluster": ["manage_index_templates", "monitor", "manage_ilm"], 
  "indices": [
    {
      "names": [ "test1_*", ".monitoring-logstash-*" ], 
      "privileges": ["write","create","create_index","manage","manage_ilm"]  
    }
  ]
}

POST _xpack/security/user/logstash_internal
{
  "password" : "123456",
  "roles" : [ "logstash_writer", "logstash_admin", "logstash_system"],
  "full_name" : "Internal Logstash User"
}

創建一個 logstash_writer 角色,並給其分配相應 cluster 和 indices 的權限

在配置文件 logstash.yml 添加如下配置

xpack.management.enabled: true
xpack.management.pipeline.id: ["Team7_test"]
xpack.management.elasticsearch.username: "logstash_internal"
xpack.management.elasticsearch.password: "123456"
xpack.management.elasticsearch.hosts: ["http://es-cn-6ja24dt4r007brz85.public.elasticsearch.aliyuncs.com:9200"]
xpack.management.logstash.poll_interval: 1s

注意:X-pack.management.pipeline.id 中支持配置多個 pipeline.id,請保證此處填入的和Kibana 創建發佈的保持一致。

啟動 Logstash

[root@master01 logstash-7.10.0]# ./bin/logstash --debug
Using JAVA_HOME defined java: /opt/jdk1.8.0_251
WARNING, using JAVA_HOME while Logstash distribution comes with a bundled JDK

在 Kibana monitor 查看 Logstash 監控

依次可以查看 Logstash 的概覽,Logstash節點和 Logstash pipeline監控。

創建 Logstash Pipeline

在 Kibana 上操作,依次點擊 Mangement-> Stack Management ->Logstash Pipelines->Create pipeline,輸入配置參數後,點擊 Create and Deploy 即可創建和發佈成功。

驗證 Pipelines 集中管理

首先往 /var/log/test1 文件中寫入多條日誌

[root@master01 ~]# echo "test1" >> /var/log/test1             
[root@master01 ~]# echo "test2" >> /var/log/test1
[root@master01 ~]# echo "test3" >> /var/log/test1 
[root@master01 ~]# echo "test4" >> /var/log/test1 

在 Elasticsearch 中可查詢到剛剛 test1_20210501 寫入的 4 條日誌

也可以在 Logstash 的監控中,看到在 15:36-15:38 之間採集到數據

使用總結

該功能屬於 X-pack 的高級特性,基礎版本的 License 不能體驗;

使用該功能時無需在 Logstash 節點配置任何 pipeline;

創建和發佈的 pipeline 會自動下發至該集群管理的所有 Logstash 實例,不能進行單獨管控。

Beats 集中管理

功能概述

在 6.5 的版本中,Elastic 官方在 Kibana 中引入了一個新功能:Beats 的集中管理。主要用來解決

Beats 的集中配置管理,通過此功能,你無需重複的登錄每臺機器上調整配置,這樣可以大大減輕配置管理相關的工作量。

Beats 的集中管理功能很簡單,包含 3 個步驟:

  1. 註冊 Beats:

註冊 Beats 就是通過 Beats enroll 命令將 Beats 註冊集群中,目前只支持兩種 beats(filebeats和metricbeat),註冊成功以後才能被管控。

  1. 配置標籤

使用一種使用配置標籤的機制來對相關配置進行分組,詳細的相關配置在配置標籤中進行添加

目前支持 4 種類型。Filebeat input,Filebeat module, Metricbeat module 和 output。

最後在 Beats 列表中綁定配置標籤,即可自動批量下發配置標籤中的相關配置,如下圖所示。

驗證方案

安裝 Metricbeat

 wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.10.0-linux-x86_64.tar.gz
 tar -zxvf metricbeat-7.10.0-linux-x86_64.tar.gz 
cd /opt/metricbeat-7.10.0-linux-x86_64

創建 Enroll Beats

在 Kibana 上操作,依次點擊 Mangement-> Stack Management ->Beats Central Management->Enroll Beats

選擇 Beat type=Metricbeat 和 Platform=DEB/RPM

即可得到 Metricbeat Enroll 命令

在 Metricbeat 安裝節點執行:

[root@master01 metricbeat-7.10.0-linux-x86_64]# ./metricbeat enroll https://es-cn-6ja24dt4r007brz85.kibana.elasticsearch.aliyuncs.com:5601 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjcmVhdGVkIjoiMjAyMS0wNS0wMVQxMDowNzo0OC4xNzZaIiwiZXhwaXJlcyI6IjIwMjEtMDUtMDFUMTA6MTc6NDguMTc2WiIsInJhbmRvbUhhc2giOiJYJO-_ve-_vSczMu-_vSjvv71cdTAwMDfvv73vv70qJVx1MDAxZe-_vWU-XHUwMDAz77-9O13vv73vv73vv70iLCJpYXQiOjE2MTk4NjM2Njh9.p3q-hw8r5I-34ICuVcRHQGqT7c6LoJ6VAZBcyIN-AfA    
This will replace your current settings. Do you want to continue? [Y/n]:y
Saving a copy of current settings to metricbeat.yml.2021-05-01T18-12-22.bak
Enrolled and ready to retrieve settings from Kibana
[root@master01 metricbeat-7.10.0-linux-x86_64]# 

即可在顯示在 Kibana 註冊成功

點擊 Done 即可

啟動 metricbeat

./metricbeat -e -c metricbeat.yml

創建 Configuration tags

創建一個 Team7 的 Configuration tags,並在其中配置了兩個 Configuration blocks,

  • 輸出到 Elasticsearch
  • 開啟 system 的 metricbeat modules

應用配置到 Beats

驗證數據

Metricbeat 索引的文檔數持續增加

GET metricbeat-7.10.0-2021.05.01/_count
{
  "count" : 405,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  }
}

在 Kibana 的 discover 頁面分析 Metricbeat 索引數據

數據管理

索引管理

Kibana 的索引管理菜單中,主要管理著和索引相關的四類數據

索引列表

管理著集群中的所有 indices,包含 Rollup 索引(通過 Rollup 聚合索引)和隱藏索引(名字以.開頭的索引)

同時還可以根據是否被 ILM 管理(Managed 和 Unmanaged)和處於 ILM 管理階段(Hot,warm,Frozen,Cold 和 Delete)進行查詢和過濾

點擊索引名可以查看索引的詳細

在索引詳情中,可以查看索引概覽信息,settings,mappings,當前索引狀態數據以及對該索引的 settings 進行修改。

同時你可以對該索引進行關閉,segment 強制合併,Refresh,清空索引緩存,Flush,凍結,刪除和解除 ILM 管理等操作

索引模板管理

在創建索引時,根據索引名匹配符合條件的索引自動設置索引的 settings,mappings 和 aliases

在此處創建索引模板,支持創建兩種方式創建索引模板

新版模板創建流程:

設置模板總覽信息

選擇 templates 組件,包括 settings,mappings,aliases

自定義修改 index settings

自定義 mappings

添加 Aliases 信息

檢查設置好的 template 信息

點擊創建按鈕即可完成模板創建

舊版模板創建流程:

和新版本的創建流程基本相同,少了可選擇已有 template 組件這一步。

模板組件管理

使用組件模板可以在多個索引模板中重用設置,映射和別名配置

創建索引組件模板的流程如下:

創建成功的效果:

創建成功後,該索引組件模板,就可以在創建索引模板時進行復用。

索引生命週期

ElasticSearch 在 6.7 版本推出的索引生命週期管理(index lifecycle management,簡稱ILM),生命週期把索引分為四個階段,Hot,Warm,Cold,和 Delete。這也是 Elastic 目前官方比較推薦的索引管理方法。

hot 索引可寫入,也可查詢,也就是我們通常說的熱數據。
warm 索引通常不會被寫入,但仍然會被查詢。
cold 索引不再被更新,並且很少被查詢。這些信息仍然需要可搜索,但如果查詢速度較慢也沒關係。
delete 索引不再需要,可以安全地刪除。

創建一個 Index Lifecycle policy

在 Kibana 上操作,依次點擊 Mangement-> Stack Management -> Index Lifecycle Policies->Create policy,輸入配置參數後,點擊 Save as new policy 可以生成一個新的策略。

點擊 Show request,可得到創建此 Policy 的請求語句

PUT _ilm/policy/team7_policy
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_docs": 5
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "delete": {
        "min_age": "10m",
        "actions": {}
      }
    }
  }
}

在集群中驗證創建的策略:

  1. 配置 lifecycle 檢測時間
PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval": "5s" 
  }
}

默認為十分鐘,為了測試效果,改為 5 秒鐘。

  1. 創建索引模板
PUT _template/team7_template
{
  "index_patterns": [
    "my_team7*"
  ],
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "team7_policy",
    "index.lifecycle.rollover_alias": "my_team7",
    "index.default_pipeline": "indexed_at"
  }
}

索引以 my_team7-開頭的自動採用 settings 的配置。

index.lifecycle.name 表示採用 team7_policy 的策略,

index.lifecycle.rollover_alias 表示創建使用該模版創建的索引

統一用 my_team7 的別名進行管理。

  1. 創建索引
PUT my_team7-000001
{
  "aliases": {
    "my_team7": {
      "is_write_index": true
    }
  }
}

創建一個開始的索引,並設置當前索引可通過索引別名寫入。

  1. 驗證功能

一切準備就緒,我們開始驗證

首先執行下面的新建文檔操作5次

POST my_team7/_doc
{
  "message": "this is team7 test"
}

之後 Rollover 執行,新的索引創建,如下所示

10m 以後, my_team7-000001 刪除至此,一個完整的 ILM Policy 執行的流程就結束了,而後續 my_team7-000002 也會按照這個設定進行流轉。

索引快照和恢復

console開發工具

  • console終端
  • Profiler分析
  • Grok調試工具

採集管理

  • Logstash管道
  • Beats集中管理

數據管理

  • 索引管理
  • 索引生命週期
  • 索引快照和恢復

Leave a Reply

Your email address will not be published. Required fields are marked *