prometheus的安裝與服務發(fā)現(xiàn)

[toc]

一、k8s部署prometheus

  • 根據(jù)prometheus operator中的yaml文件改寫DaemonSet控制器的node-exporter

  • 創(chuàng)建prometheus用到的configmap配置文件

  • 創(chuàng)建serviceaccount,和clusterrolebinding擅这,綁定serviceaccount和cluster-admin的角色

  • 創(chuàng)建prometheus的deployment配置文件

  • 創(chuàng)建service是整,暴露nodeport端口虱而,綁定到prometheus的deployment的pod

1646640910791.png
1646641421247.png
  • 監(jiān)控pod信息痹筛,使用cadvisor,使用DaemonSet控制器部署鸿秆,默認監(jiān)聽端口8080
1646642142347.png
  • 更改uri路徑為/metrics酌畜,顯示pod指標數(shù)據(jù)
1646642274613.png

二、二進制安裝

1.1 部署prometheus-server

  • 下載prometheus-server二進制包
wget https://github.com/prometheus/prometheus/releases/download/v2.33.4/prometheus-2.33.4.linux-amd64.tar.gz
# 解壓
tar xvf prometheus-2.33.4.linux-amd64.tar.gz
# 軟鏈接 去掉版本號
ln -sv /apps/prometheus-2.33.4.linux-amd64 /apps/prometheus
# 進入鏈接目錄
cd prometheus
# 檢查prometheus.yml配置文件是否正確
./promtool check config prometheus.yml
# 直接啟動 默認加載當前目錄下的配置文件
./prometheus

直接啟動的方式是在當前控制臺輸出日志卿叽,并且會在當前目錄下產(chǎn)生一個data的目錄桥胞,存儲prometheus的數(shù)據(jù)(不能刪除),默認監(jiān)聽端口9090

  • 創(chuàng)建prometheus.service文件
cat > /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/prometheus
ExecStart=/apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml

[Install]
WantedBy=multi-user.target
EOF

注意--config.file文件中間是"."考婴,不是"-"贩虾,啟動參數(shù)可以通過./prometheus --help進行查看

  • 啟動prometheus
# 設(shè)置為開機自啟動
systemctl enable prometheus.service
# 重新加載service文件
systemctl daemon-reload
# 啟動prometheus
systemctl start prometheus.service

第一次創(chuàng)建出來prometheus.service文件可以不用執(zhí)行daemon-reload,如果后續(xù)更改service文件蕉扮,需要執(zhí)行daemon-reload

1.2 部署node-exporter

  • 下載node-expoter二進制包
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
ln -sv node_exporter-1.3.1.linux-amd64 node_exporter
  • 創(chuàng)建node_exporter.service文件
cat > /etc/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
Restart=on-failure
ExecStart=/apps/node_exporter/node_exporter

[Install]
WantedBy=multi-user.target
EOF

啟動選項可以通過./node_exporter --help查看

  • 啟動node_exporter
# 設(shè)置為開機自啟動
systemctl enable node-exporter.service
# 重新加載service文件
systemctl daemon-reload
# 啟動prometheus
systemctl start node-exporter.service

默認監(jiān)聽端口9100

1.3 prometheus監(jiān)控node

  • 原始prometheus.yaml文件
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

默認只監(jiān)聽prometheus server自己

  • 更改prometheus.yml配置文件
  - job_name: "prometheus-node"
    static_configs:
      - targets: ["IP:9100","IP:9100","IP:9100"]

在配置文件末尾添加要監(jiān)控的主機的地址和node_exporter監(jiān)聽的端口

  • 重啟prometheus-server
systemctl restart prometheus.service
  • 查看新加入監(jiān)控的node
1646624157982.png

在prometheus web頁面的Status下拉菜單中的Targets選項整胃,默認沒間隔15s收集一次數(shù)據(jù),Last Scrape顯示的時間是距離上次抓取數(shù)據(jù)的時間

  • 使用promQL查詢
1646634992070.png
  • 下載grafana包
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.3.7_amd64.deb
dpkg -i grafana-enterprise_8.3.7_amd64.deb

安裝的時候會報錯缺少依賴libfontconfig1喳钟,使用apt install -f 解決

默認監(jiān)聽端口3000

1646636147762.png

默認賬號名密碼為amdin/admin屁使,如果不想修改,可以點擊Skip按鈕跳過

  • 添加數(shù)據(jù)源
1646636341458.png

點擊Add data source

1646636400807.png

點擊Prometheus框

1646636544964.png

填寫名字奔则,是否設(shè)置為默認蛮寂,填寫prometheus的地址

1646636588380.png

連接測試

  • 添加模板

官網(wǎng)查找模板地址:https://grafana.com/grafana/dashboards/

1646636885109.png

點擊Import

1646636939632.png

填寫模板id,或者導入json文件

1646637174861.png

修改模板名字易茬,選擇數(shù)據(jù)源酬蹋,點擊Import導入

1646637486547.png
  • 下載consul包
wget https://releases.hashicorp.com/consul/1.11.4/consul_1.11.4_linux_amd64.zip

三及老、PromQL語句

官方網(wǎng)址:https://prometheus.io/docs/prometheus/latest/querying/basics/

Prometheus提供一個函數(shù)式的表達式語言PromQL(Prometheus Query Language),可以使用戶實時查找和聚合時間序列數(shù)據(jù)范抓,表達式計算結(jié)果可以在圖標中展示骄恶,也可以在Prometheus表達式瀏覽器中以表格形式展示,或者作為數(shù)據(jù)源匕垫,以HTTP API的方式提供給外部系統(tǒng)使用僧鲁。

PromQL支持處理兩種向量,并內(nèi)置提供了一組用于數(shù)據(jù)處理的函數(shù)象泵;即時向量:最近一次的時間戳上跟蹤的數(shù)據(jù)指標寞秃;時間范圍向量:指定時間范圍內(nèi)的所有時間戳上的數(shù)據(jù)指標

  • 數(shù)據(jù)類型

即時向量(Instant Vector):是一組時間序列,每個時間序列包含單個數(shù)據(jù)樣本偶惠,具有相同時間戳的一組樣本值春寿,prometheus_http_requests_total

范圍向量(Range Vector):在任何一個時間范圍內(nèi),抓取所有度量指標數(shù)據(jù)忽孽,一段時間內(nèi)的所有樣本值绑改,prometheus_http_requests_total[5m]

標量(Scalar):一個浮點型的數(shù)據(jù)值,使用node_load1獲取到一個即時向量扒腕,可以使用內(nèi)置函數(shù)scalar()將瞬時向量轉(zhuǎn)換為標量兴革;例如:scalar(sum(node_load1))

字符串:字符串類型的數(shù)據(jù)吭净,支持使用單引號、雙引號或反引號進行引用悲敷,但是反引號中不會對轉(zhuǎn)義字符進行轉(zhuǎn)義

  • 指標類型

PromQL有四個指標類型覆履,他們主要由Prometheus的客戶端使用

Counter:計數(shù)器蹋盆,單調(diào)遞增,除非重置(例如服務器或進程重啟)硝全,如磁盤I/O總數(shù)栖雾、nginx請求總數(shù)、網(wǎng)卡流經(jīng)的報文總數(shù)等

Guage:儀表盤伟众,表示是一個可以任意變化的指標數(shù)據(jù)析藕,可增可減,如帶寬速率凳厢、CPU負載账胧、內(nèi)存利用率、nginx活動連接數(shù)等

Histogram:直方圖先紫,將事件范圍內(nèi)的數(shù)據(jù)劃分成不同的時間段治泥,并各自評估其樣本個數(shù)以及樣本之和,因而可計算出分數(shù)位遮精,如每分鐘產(chǎn)生一個當前的活躍連接數(shù)居夹,那么一天就會產(chǎn)生1440個數(shù)據(jù),查看數(shù)據(jù)的間隔繪圖跨度為2小時,那么2小時位置的柱狀圖(bucket)會包含0-2兩個小時的數(shù)據(jù)

  • 可用于分析因異常值而引起的平均值過大的問題
  • 分位數(shù)計算要使用專門的histogram_quantile函數(shù)

Summary:類似于Histogram准脂,統(tǒng)計的不是區(qū)間的個數(shù)而是統(tǒng)計分位數(shù)劫扒,客戶端會直接計算并上報分位數(shù),0~100%

  • 匹配器

= :選擇與提供的字符串完全相同的標簽狸膏,精確匹配

!=:選擇與提供的字符串不相同的標簽粟关,取反

=~:選擇正則表達式與提供的字符串(或子字符串)相匹配的標簽

!~:選擇正則表達式與提供的字符串(或子字符串)不匹配的標簽

node_load1{instance=~"172.31.7.11.*:9100$"} # 包含正則且匹配

  • 時間范圍

s - 秒

m - 分鐘

h - 小時

d - 天

w - 周

y - 年

node_memory_MemTotal_bytes{instance="172.31.7.111:9100"}[5m]

  • 運算符

+ 加法

- 減法

* 乘法

/ 除法

% 模

^ 冪等

node_memory_MemFree_bytes/1024/1024

  • 聚合運算

max() # 最大值

計算每個節(jié)點的最大流量值

max(node_network_receive_bytes_total) by (instance)

計算每個節(jié)點最近五分鐘沒餓device的最大流量

max(rate(node_network_receive_bytes_total[5m])) by (device)

min() # 最小值

avg() # 平均值

sum()

sum(prometheus_http_requests_total)

count()

count(node_os_version)

abs() # 返回指標數(shù)據(jù)的值

abs(sum(prometheus_http_requests_total{handler="/metrics"}))

absent() # 如果監(jiān)控指標有數(shù)據(jù)就返回空,如果監(jiān)控項沒有數(shù)據(jù)就返回1

absent(sum(prometheus_http_requests_total{handler="/metrics"}))

stddev() # 標準差

stddev(prometheus_http_requests_total)

stdvar() # 求方差

stdvar(prometheus_http_requests_total)

topk() # 樣本值排名最大的N個數(shù)據(jù)

topk(6,prometheus_http_requests_total)

bottomk() # 樣本值排名最小的N個數(shù)據(jù)

bottomk(6,prometheus_http_requests_total)

rate() # 函數(shù)是專門搭配counter數(shù)據(jù)類型使用函數(shù)环戈,功能是取counter數(shù)據(jù)類型在這個時間段中平均每秒的增量平均數(shù)

rate(prometheus_http_requests_total[5m])

rate(node_network_receive_bytes_total[5m])

irate() # 函數(shù)是專門搭配counter數(shù)據(jù)類型使用函數(shù)闷板,功能是取counter數(shù)據(jù)類型在這個時間段平均每秒的峰值

irate(prometheus_http_requests_total[5m])

irate(node_network_receive_bytes_total[5m])

  • rate和irate都會用于計算某個指標在一定時間間隔內(nèi)的變化速率;irate取的是在指定時間范圍內(nèi)的最近兩個數(shù)據(jù)點來算速率院塞,而rate會取指定時間范圍內(nèi)所有數(shù)據(jù)點,算出一組速率,然后取平均值作為結(jié)果;官網(wǎng)文檔說:irate適合快速變化的計數(shù)器(counter)守问,而rate適合緩慢變化的計數(shù)器坑资;快速變化的計數(shù)器,如果使用rate,容易把峰值削平

by # 在計算結(jié)果中常柄,只保留by指定的標簽值搀擂,并移除其它所有的

sum(rate(node_network_receive_packages_total{instance=~".*"[10m]})) by (instance)

sum(rate(node_memory_MemFree_bytes[5m])) by (increase)

without # 從計算結(jié)果中移除列舉的instance,job標簽衬潦,保留其它標簽

四漂羊、服務發(fā)現(xiàn)及relabel

Prometheus默認是采用pull方式拉取監(jiān)控數(shù)據(jù)的买喧,也就是定時去目標主機上抓取metrics數(shù)據(jù)瞬项,每一個抓取的目標需要暴露一個HTTP接口皂吮,Prometheus通過這個暴露的接口就可以獲取到相應的指標數(shù)據(jù)戒傻,這種方式需要由目標服務決定采集的目標有哪些,通過配置在scrape_configs中的各種job來實現(xiàn)蜂筹,無法動態(tài)感知新服務需纳,如果后面增加了節(jié)點或者組件信息,就得手動修改配置文件艺挪,并重啟Prometheus不翩,很不友好,所以出現(xiàn)了動態(tài)服務發(fā)現(xiàn)麻裳,動態(tài)服務發(fā)現(xiàn)能夠自動發(fā)現(xiàn)集群中的新端點口蝠,并加入到配置中,通過服務發(fā)現(xiàn)津坑,Prometheus能查詢到需要監(jiān)控的Target列表妙蔗,然后輪詢這些Target獲取監(jiān)控數(shù)據(jù)。

Prometheus獲取數(shù)據(jù)源Targets的方式有很多種国瓮,如靜態(tài)配置和服務發(fā)現(xiàn)配置灭必,Prometheus支持多種服務發(fā)現(xiàn),常用的主要有以下幾種:

kubernetes_sd_configs:kubernetes服務發(fā)現(xiàn)乃摹,讓prometheus動態(tài)發(fā)現(xiàn)kubernetes中被監(jiān)控的目標

static_configs:靜態(tài)服務發(fā)現(xiàn)禁漓,基于prometheus配置文件指定監(jiān)控目標

dns_sd_configs:DNS服務發(fā)現(xiàn)監(jiān)控目標

consul_sd_configs:consul服務發(fā)現(xiàn),基于consul服務動態(tài)發(fā)現(xiàn)監(jiān)控目標

file_sd_configs:基于指定的文件實現(xiàn)服務發(fā)現(xiàn)

prometheus的靜態(tài)服務發(fā)現(xiàn)static_configs:每當有一個新的目標示例需要監(jiān)控孵睬,都需要手動修改配置文件配置目標target

prometheus的consul服務發(fā)現(xiàn)consul_sd_configs:prometheus一直監(jiān)視consul服務播歼,當發(fā)現(xiàn)在consul中注冊的服務有變化,prometheus會自動監(jiān)控到所有注冊到consul中的目標資源

prometheus的k8s服務發(fā)現(xiàn)kubernetes_sd_configs:promtheus與kubernetes的API進行交互掰读,動態(tài)的發(fā)現(xiàn)kubernetes中部署的多有可監(jiān)控的目標資源

4.1 kubernetes_sd_configs

官方網(wǎng)址:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

prometheus的relabeling(重新修改標簽)功能很強大秘狞,它能夠在抓取到目標示例之前把目標示例的元數(shù)據(jù)標簽動態(tài)重新修改,動態(tài)添加或者覆蓋標簽

prometheus加載target成功之后蹈集,在Target實例中烁试,都包含一些Metadata標簽信息,默認的標簽有:__addresss__:以<host>:<port>格式顯示目標targets的地址

__scheme__:采集的目標服務地址的Scheme形式拢肆,HTTP或者HTTPS

__metrics_path__:采集的目標服務的訪問路徑

  • 重新標記目的

為了更好的識別監(jiān)控指標减响,便于后期調(diào)用數(shù)據(jù)繪圖、告警等需求郭怪,prometheus支持對發(fā)現(xiàn)的目標進行l(wèi)abel修改支示,在兩個階段可以重新標記:

relabel_configs:在采集之前(比如在采集數(shù)據(jù)之前重新定義元標簽),可以使用relabel_configs添加一些標簽鄙才、也可以只采集特定目標或過濾目標

metric_relabel_configs:如果是已經(jīng)抓取都指標數(shù)據(jù)時颂鸿,可以使用metric_relabel_configs做最后的重新標記和過濾

配置-->重新標簽(relabel_configs)-->抓取-->重新標簽(metric_relabel_configs)-->TSDB

    - job_name: 'kubernetes-apiserver' # job名稱
      kubernetes_sd_configs: # 基于kubernetes_sd_configs實現(xiàn)服務發(fā)現(xiàn)
      - role: endpoints # 發(fā)現(xiàn)endpoints
      scheme: https # 當前job使用的發(fā)現(xiàn)協(xié)議
      tls_config: # 證書配置
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt # 容器里的token路徑
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs: # 重新re修改標簽lebel配置configs
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] # 源標簽
        action: keep # action定義了relabel的具體動作,action支持多種
        regex: default;kubernetes;https # 發(fā)現(xiàn)default命名空間的kubernetes服務是https協(xié)議
  • label詳解

source_labels:源標簽攒庵,沒有經(jīng)過relabel處理之前的標簽名字

target_label:通過action處理之后的新標簽名字

regex:正則表達式嘴纺,匹配源標簽

replacement:通過分組替換后標簽(target_label)對應的值

  • action詳解

replace:替換標簽值败晴,根據(jù)regex正則匹配到源標簽的值,使用replacement來引用表達式匹配的分組

keep:滿足regex正則條件的實例進行采集颖医,把source_labels中沒有匹配到regex正則內(nèi)容的Target實例丟掉

drop:滿足regex正則條件的實例不采集位衩,把source_labels中匹配到regex正則內(nèi)容的Target實例丟掉

hashmod:使用hashmod計算source_labels的Hash值并進行對比,基于自定義的模數(shù)取模熔萧,以實現(xiàn)對目標進行分類糖驴、重新賦值等功能

    scrape_configs:
    - job_name: ip_job
      relabel_configs:
      - source_labels: [__address__]
        modulus: 4
        target_label: __ip_hash
        action: hashmod
      - source_labels: [__ip_hahs]
        regex: ^1$
        action: keep

labelmap:匹配regex所有標簽名稱,然后賦值匹配標簽的值進行分組佛致,通過replacement分組引用({1},{2}...)

labelkeep:匹配regex所有標簽名稱贮缕,其它不匹配的標簽豆?jié){從標簽集中刪除

labeldrop:匹配regex所有標簽名稱,其它匹配的標簽都將從標簽集中刪除

  • 測試label功能

注釋如下行內(nèi)容

#      relabel_configs:
#      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
#        action: keep
#        regex: default;kubernetes;https

先在default的namespace下創(chuàng)建svc和pod俺榆,然后重新apply下prometheus的configmap配置文件感昼,先delete掉prometheus的deployment應用,再apply下罐脊,就會發(fā)現(xiàn)有好多down狀態(tài)的定嗓,是因為做服務發(fā)現(xiàn)的時候沒有過濾,pod也被匹配成功并進行監(jiān)控萍桌,但是pod并沒有提供metrics指標數(shù)據(jù)宵溅,所以不通

  • 支持發(fā)現(xiàn)的目標類型

node

service

pod

endpoints

Endpointslice # 對endpoint進行切片

ingress

  • kube-dns服務發(fā)現(xiàn)

在kube-dns的注解位置一定要包含如下內(nèi)容

  annotations:
    prometheus.io/port: "9153" # 注解標簽,用于prometheus服務發(fā)現(xiàn)端口
    prometheus.io/scrape: "true" # 是否允許prometheus抓取數(shù)據(jù)

prometheus的configmap配置文件中添加如下內(nèi)容

    - job_name: 'kubernetes-service-endpoints'
      kubernetes_sd_configs:
      - role: endpoints # 角色
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep # 匹配正則就抓取
        regex: true # 匹配注解中的prometheus.io/scrape
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
        action: replace # 替換
        target_label: __scheme__ # 把__meta_kubernetes_service_annotation_prometheus_io_scheme 替換為 __scheme__
        regex: (https?) # http或https ?表示可以有或者沒有
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+) # 表示任意字符的一個或多個上炎,(.*)表示任意字符的0個或多個
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        action: replace
        target_label: kubernetes_name
  • prometheus部署在k8s集群外部實現(xiàn)服務發(fā)現(xiàn)

首先創(chuàng)建用戶恃逻,角色,綁定用戶和角色藕施,拿到用戶的token寇损,存到prometheus主機的/apps/prometheus/k8s.token文件中(文件路徑和名字可以自己指定),然后在prometheus的配置文件(prometheus.yaml)中添加job裳食,以監(jiān)控k8s的api-server為例

    - job_name: 'kubernetes-apiserver-monitor'
      kubernetes_sd_configs:
      - role: endpoints
      api_server: https:IP:PORT # 指定自己的apiserver的ip和端口
      scheme: https
      tls_config:
        insecure_skip_verify: true # 跳過證書驗證
      bearer_token_file: /apps/prometheus/k8s.token # 保存在主機上的token文件
      relabel_configs:
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
        action: keep
        regex: default;kubernetes;https
      - target_label: __address__
        replacement: IP:PORT # 替換為自己apiserver的ip和端口

4.2 static_configs

  • 主機上安裝prometheus的配置文件(prometheus.yml)矛市,手動添加靜態(tài)發(fā)現(xiàn)列表
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "prometheus-node"
    static_configs:
      - targets: ["IP:9100"]

4.3 consul_sd_configs

官方網(wǎng)址:https://www.consul.io/

consul是分布式k/v數(shù)據(jù)存儲集群,目前常用于服務的注冊和發(fā)現(xiàn)

  • 部署consul集群

安裝包下載:https://releases.hashicorp.com/consul/1.11.4/

wget https://releases.hashicorp.com/consul/1.11.4/consul_1.11.4_linux_amd64.zip
unzip consul_1.11.4_linux_amd64.zip
cp consul /usr/local/bin
consul -h # 驗證是否可執(zhí)行
# 創(chuàng)建數(shù)據(jù)目錄
mkdir -p /data/consul
# 啟動服務
# node1
nohup consul agent -server -bootstrap -bind=NODE1_IP -client=NODE1_IP -data-dir=/data/consul -ui -node=NODE1_IP &
# node2
nohup consul agent -bind=NODE2_IP -client=NODE2_IP -data-dir=/data/consul -node=NODE2_IP -join=NODE1_IP &
# node3
nohup consul agent -bind=NODE3_IP -client=NODE3_IP -data-dir=/data/consul -node=NODE3_IP -join=NODE1_IP &

默認監(jiān)聽端口8500

查看啟動日志nohup.out

1646807864616.png

查看界面

1646807934207.png
  • 寫入數(shù)據(jù)
curl -X PUT -d '{"id":"node-exporteXXX","name":"node-exporterXXX","address":"IP","port":9100,"tags":"node-exporter","checks":[{"http":"http://IP:PORT","interval":"5s"}]}' http://CONSUL_IP:8500/v1/agent/service/register

不返回值诲祸,http code返回200即為成功

1646808816354.png
  • 配置prometheus到consul服務發(fā)現(xiàn)

k8s prometheus configmap配置文件

    - job_name: 'consul'
      honor_labels: true
      metrics_path: /metrics
      scheme: http
      consul_sd_configs:
        - server: CONSUL_IP1:8500
          services: [] # 發(fā)現(xiàn)的目標服務名稱尘盼,空為所有服務,可以寫servicea,serviceb,servicec
        - server: CONSUL_IP2:8500
          services: []
        - server: CONSUL_IP3:8500
          services: []
      relabel_configs:
      - source_labels: ['__meta_consul_tags']
        target_label: 'product'
      - source_labels: ['__meta_consul_dc']
        target_label: 'idc'
      - source_labels: ['__meta_consul_service']
        regex: "consul"
        action: drop

主機prometheus.yml配置文件

  - job_name: 'consul'
    honor_labels: true
    metrics_path: /metrics
    scheme: http
    consul_sd_configs:
      - server: CONSUL_IP1:8500
        services: [] # 發(fā)現(xiàn)的目標服務名稱烦绳,空為所有服務,可以寫servicea,serviceb,servicec
      - server: CONSUL_IP2:8500
        services: []
      - server: CONSUL_IP3:8500
        services: []
    relabel_configs:
    - source_labels: ['__meta_consul_tags']
      target_label: 'product'
    - source_labels: ['__meta_consul_dc']
      target_label: 'idc'
    - source_labels: ['__meta_consul_service']
      regex: "consul"
      action: drop

頁面驗證

1646810941729.png
  • 添加cadvisor
curl -X PUT -d '{"id":"cadvisor-XXX","name":"cadvisor-XXX","address":"IP","port":8080,"tags":["cadvisor"],"checks":[{"http":"http://IP:8080","interval":"5s"}]}' http://CONSUL_IP:8500/v1/agent/service/register
1646812493785.png
  • 刪除數(shù)據(jù)
curl --request PUT http://CONSUL_IP:8500/v1/agent/service/deregister/node-exporterXXX

刪掉一個node-expoter

1646812797092.png

4.4 file_sd_configs

  • 在prometheus主機上創(chuàng)建/apps/prometheus/file_sd/file_sd_server.json文件
[
  {
    "targets": ["192.168.204.101:9100","192.168.204.102:9100","192.168.204.103:9100"]
  }
]
  • prometheus調(diào)用json文件
  - job_name: 'file_sd_server'
    file_sd_configs:
      - files:
        - /apps/file_sd/file_sd_server.json
        refresh_interval: 10s # 讀取json文件間隔時間

json配置文件中添加或刪除主機配紫,不需要重啟prometheus

發(fā)現(xiàn)添加的主機

1646814252912.png

添加完成

1646814309913.png

4.5 dns_file_configs

基于dns的服務發(fā)現(xiàn)允許配置指定一組dns域名径密,這些域名會定期查詢以發(fā)現(xiàn)目標列表,域名需要可以被配置的dns服務器解析為ip

此方法僅支持DNS A躺孝、AAAA享扔、SRV記錄查詢

A記錄: 將域名指向一個IPv4地址

AAAA記錄:將域名指向一個IPv6地址

SRV記錄:SRV記錄了哪臺計算機提供了具體哪個服務底桂,格式為:自定義的服務名字.協(xié)議的類型.域名(例如:_example-server._tcp.www.mydns.com

prometheus會對收集的指標數(shù)據(jù)進行重新達標,重新標記期間惧眠,可以使用一下元標簽:

__meta_dns_name:產(chǎn)生發(fā)現(xiàn)目標的記錄名稱

__meta_dns_srv_record_target:SRV記錄的目標字段

__meta_dns_srvrecord_port:SRV記錄的端口字段

如果沒有dns服務器籽懦,手動修改/etc/hosts配置文件,添加解析

IP DOMAIN_NAME

修改prometheus.yml配置文件

  - job_name: 'dns-server-name-monitor'
    metrics_path: "/metrics"
    dns_sd_configs:
    - names: ["node1.example.com","node2.example.com"]
      type: A
      port: 9100
      refresh_interval: 10s

修改域名解析指向的主機ip氛魁,不需要重啟prometheus暮顺,添加新的域名如添加node3.example.com需要重啟prometheus

1646817725990.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秀存,隨后出現(xiàn)的幾起案子捶码,更是在濱河造成了極大的恐慌,老刑警劉巖或链,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惫恼,死亡現(xiàn)場離奇詭異,居然都是意外死亡澳盐,警方通過查閱死者的電腦和手機祈纯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叼耙,“玉大人腕窥,你說我怎么就攤上這事⊙” “怎么了油昂?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長倾贰。 經(jīng)常有香客問我冕碟,道長,這世上最難降的妖魔是什么匆浙? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任安寺,我火速辦了婚禮,結(jié)果婚禮上首尼,老公的妹妹穿的比我還像新娘挑庶。我一直安慰自己,他們只是感情好软能,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布迎捺。 她就那樣靜靜地躺著,像睡著了一般查排。 火紅的嫁衣襯著肌膚如雪凳枝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音岖瑰,去河邊找鬼叛买。 笑死,一個胖子當著我的面吹牛蹋订,可吹牛的內(nèi)容都是我干的率挣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼露戒,長吁一口氣:“原來是場噩夢啊……” “哼椒功!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玫锋,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蛾茉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撩鹿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谦炬,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年节沦,在試婚紗的時候發(fā)現(xiàn)自己被綠了键思。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡甫贯,死狀恐怖吼鳞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叫搁,我是刑警寧澤赔桌,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站渴逻,受9級特大地震影響疾党,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惨奕,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一雪位、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梨撞,春花似錦雹洗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至港粱,卻和暖如春嗜侮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工锈颗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咪惠。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓击吱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遥昧。 傳聞我的和親對象是個殘疾皇子覆醇,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容