|
|
1.Ceph的Dashboard只适合查看集群状态,生产环境中最好还是把监控ceph纳入到已有的zabbix或Prometheus监控系统中;由于Prometheus是一个restful风格的api,它是通过http或https接口进行数据指标采集的,但是很多被监控的应用并没有http接口,因此需要借助各自应用的exporter进行间接采集;
0 F0 G' L2 ?$ Y2.mgr的prometheus_exporter和node_exporter1 T. A" J* _/ F5 e9 P( q
1.由于Ceph底层是rados协议没有http接口,所以也需要有单独的exporter进行采集,只需要在ceph的一个节点上安装prometheus_exporter,获得cephX授权后通过mon或mgr查询ceph集群信息后,把采集到的数据转为与prometheus兼容的格式并通过http协议响应prometheus的拉取请求;好在这个prometheus_exporter是直接内置在Ceph的mgr模块中的,只需要启用该模块即可;) P7 p5 w( h* G7 O9 D
2.由于mgr内嵌的prometheus_exporter只是监控Ceph系统本身的数据,而每个ceph节点主机的cpu、内存信息还是需要部署node_exporter进行数据采集监控的;8 j8 U( y! G& t1 F& P$ |2 K
3.1.创建运⾏Prometheus Server进程的系统⽤⼾,并为其创建家⽬录/var/lib/prometheus作为数据存储⽬录;如果公司内部中已有prometheus,可省略下面部分的安装过程,直接进行监控ceph的配置部分即可;
) J% a8 ^& V' t+ ]; T4 H- `* R* o) W ~]# useradd -r -m -d /var/lib/prometheus prometheus #创建数据目录
: [) ~3 [4 A o/ @; G5 x% F ~]# tar xf prometheus-2.7.2.linux-amd64.tar.gz -C /usr/local/
8 N& Z$ \ u, T6 [$ r- k! N #官方下载二进制包解压
! F' M% C i# _# Y) ^ ~]# ln /usr/local/prometheus-2.7.2.linux-amd64 /usr/local/prometheus
* r( Y+ H* n/ p$ H+ A- g #创建软链接/ F. i1 p; H) A# N( L
~]# prometheus --version #查看prometheus版本
! _" m, J0 L7 q* f 创建Prometheus专⽤的Unit File文件放在/usr/lib/systemd/system/目录下4 P; D5 U$ D& U% W
~]# vim /usr/lib/systemd/system/prometheus.service9 w, B- j+ P4 D5 n* a; @
[Unit]+ F" X4 O7 t8 F# C
Documentation=https://prometheus.io% e- v6 ~1 o4 j" V; y' I6 o
After=network.target
( w% h0 {2 n3 p8 B [Service]
0 u# s* E( W8 V0 W EnvironmentFile=-/etc/sysconfig/prometheus2 M- h. Y3 @+ I8 L
User=prometheus
2 `$ X/ p5 D# {6 Z5 w+ T ExecStart=/usr/local/prometheus/prometheus \
( U4 d" t& } P& { --storage.tsdb.path=/var/lib/prometheus \) J! K8 G7 X* L, d5 Z. K' x3 H
--config.file=/usr/local/prometheus/prometheus.yml \
5 o3 A( D" W# m+ R/ M) w3 T --web.listen-address=0.0.0.0:9090 \3 W% A4 s8 b) e, h+ [6 S4 g% W
--web.external-url=" ^3 H5 P9 d& N/ R! A0 J
Restart=on-failure
: N% ~- A8 p( H% G% U) V+ K) R7 ^ StartLimitInterval=12 u9 _, T: k( ^7 T' z
RestartSec=3
% g2 R7 Q5 @9 f+ P b D [Install]
" a" L5 P, j j# e WantedBy=multi-user.target* e5 s: J! R, P2 ^/ E f
3.2.每个Ceph节点安装node_exporter采集ceph节点主机的数据6 D0 U. U# a5 M) j
~]# tar xf node_exporter-0.17.0.linux-amd64.tar.gz -C /usr/local/
T3 h9 K ` I+ O ~]# ln -sv /usr/local/node_exporter-0.17.0.linux-amd64 /usr/local/node_exporte2 Z! M" ]7 i7 ?/ Q! [ n: w
~]# useradd -r -m -d /var/lib/prometheus prometheus
8 ^( B6 Z. w. n5 t& o: O( T$ x 创建运⾏Prometheus Server进程的系统⽤⼾,并为其创建家⽬录/var/lib/prometheus作为数据存储⽬录
0 D% \7 E5 L/ A& y' @3 `! D1 [# _ ~]# vim /usr/lib/systemd/system/node_exporter.service
- W4 S! ?, Y# Y+ E& V$ z5 z [Unit]
' ]" S8 D! y" }6 R* y- h Documentation=https://github.com/prometheus/node_exporter
+ g ^7 a0 m1 q After=network.target1 l# \- A, {& V1 }' L
[Service], @% ~. u: {9 n
EnvironmentFile=-/etc/sysconfig/node_exporter7 v3 J5 O. K0 |1 d- \* A: x0 y' |
User=prometheus3 q- S/ S; L# k3 m- q v' R g
ExecStart=/usr/local/node_exporter/node_exporter \
5 u; F; \0 X8 ~, Z% S: U- n3 C $NODE_EXPORTER_OPTS
% K% B7 H5 D' u Restart=on-failure
# G$ j$ ^# K r, J. F StartLimitInterval=1# K. [; W5 d1 Z
RestartSec=3
9 U o5 o4 A. Z6 L* Y! _ [Install]( c; T' u, T! i6 R, q
WantedBy=multi-user.target5 B( S+ \7 W# m: G
~]# systemctl daemon-reload && systemctl start node_exporter.service/ p* N# v. u% z& j% |+ I
~]# s -tunpl |grep 9100 #查看监控端口
' V8 g. Q- E* L; a. u- E tcp LISTEN 0 128 :::9100 :::* users:(("node_exporter",pid=6776,fd=3))
4 f$ ^: A- ` \+ C3 O$ v( N ~]# curl localhost:9100/metrics #测试会否采集到指标数据, v+ H- x0 [! b- c
3.3.启用Ceph-mgr中的promethues模块
1 |" Y3 Y1 [* [, S# [0 `5 i! | ~]# ceph mgr module enable prometheus
& }* p- U5 e4 |* S) U1 R! I #Prometheus模块默认监听于TCP协议的9283端⼝( M' J! M7 p, H: z
~]# ceph mgr services3 _* q! `8 C! y# e" g: t
{
( ^9 ~8 k) S4 I "dashboard": "http://stor02.cre.io:8080/",# I! Z0 L# U) y: `2 d
"prometheus": "http://stor02.cre.io:9283/"
; g# L" D" T) Q$ P0 E3 H }
6 ?7 n# f9 ?! m5 J ~]# ss -tunpl |grep 9283
4 f. \4 `( d% [8 Y tcp LISTEN 0 5 :::9283 :::* users:(("ceph-mgr",pid=1071,fd=22))
# v' ?2 u( I5 w: Y( } #会在Mgr所在的存储节点上开启9283端口9 U# \9 \; Z/ d/ u
3.4.Prometheus的主配置⽂件为prometheus.yml字段和格式解释; v1 @9 A& s% S9 M' \
prometheus.yml文件主要由global、rule_files、scrape_configs、alerting、remote_write和remote_read⼏个配置段组成,其中:
" N' I- W& S5 ]- f! v: j' F/ K1 w 1.global:全局配置段;
1 e- A. I8 O- C* u9 B8 W1 u 2.scrape_configs:配置要监控的目标对象
. O7 T9 d3 [* w% C/ W+ s4 x! [% K scrape配置集合,⽤于定义监控的⽬标对象(target)的集合,以及描述如何抓取(scrape)相关指标数据的配置参数;通常,每个scrape配置对应于⼀个单独的作业(job),⽽每个targets可通过静态配置(static_configs)直接给出定义,也可基于Prometheus⽀持的服务发现机制进⾏⾃动配置;- {/ l) W0 P+ F' I
3.alertmanager_configs:指定配置监控的报警规则 q4 {* X9 |( v- d- M
可由Prometheus使⽤的Alertmanager实例的集合,以及如何同这些Alertmanager交互的配置参数;每个Alertmanager可通过静态配置(static_configs)直接给出定义,也可基于Prometheus⽀持的服务发现机制进⾏⾃动配置;. q/ L* |6 D7 p0 ]) E
4.remote_write:& c8 q. N( x) @/ I$ u6 c$ U
配置"远程写"机制,Prometheus需要将数据保存于外部的存储系统(例如InfluxDB)时定义此配置段,随后Prometheus将样本数据通过HTTP协议发送给由URL指定适配器(Adaptor);
- d V! \9 C5 T9 @6 O% d. ^ 5.remote_read:7 u. F6 T7 L$ r! p/ t4 U- z+ ]+ o: @
配置"远程读"机制,Prometheus将接收到的查询请求交给由URL指定适配器(Adpater)执⾏,Adapter将请求条件转换为远程存储服务中的查询请求,并将获取的响应数据转换为Prometheus可⽤的格式: a) a2 b5 O3 e: d
2.1.scrape配置段$ q5 E6 M, m0 A3 ?! S7 I
1.使⽤static_configs静态配置Job的语法格式:% g- H% _# x9 z0 |- b
# The targets specified by the static config.
4 h7 C) W! `4 _# ]1 u targets:, g& c5 |5 O+ c5 Q5 ~
[ - '<host>' ]+ T0 ?! G6 G) S! f
# Labels assigned to all metrics scraped from the targets.
/ Z. W+ A: p3 K6 Q+ i- r6 z- v5 U+ b labels:
; @7 V, z0 |. H3 c0 l2 a& y [ <labelname>: <labelvalue> ... ]3 n! V1 E: u6 A- V6 k
2.使⽤file_sd_configs基于文件发现机制配置Job的语法格式
$ p0 E0 @8 m' W [
c' @# g7 s: Z3 Z( o" j( n {9 x: |- r( ^& g+ G% q, d# m4 }
"targets": [ "<host>", ... ],
+ V( o7 q1 k) r3 U; N$ D4 J) U! d; |' [ "labels": {
0 t% S( f5 S' w$ p3 D+ B "<labelname>": "<labelvalue>", ...5 n# U: v" h! e
}
8 T) Z. @, w' ]/ R: B6 {2 r/ s },0 x: _# T' j% U
...% y& M$ Z" N7 ~3 r% {( L
]
c/ y ]4 T' `, ~, \' S0 h# Q3.5.配置prometheus监控ceph集群和ceph存储节点主机
/ o- R9 r9 O! V$ O$ ^& L* _' S ~]# vim /etc/prometheus/prometheus.yml
/ w" E+ f: `8 R+ P9 w# I6 }% t scrape_configs:
q' _+ q3 ?, F: J" Q/ ] - job_name: 'prometheus'
9 ]* U. {* _0 @" [% H H$ T static_configs:3 y( X/ _+ d0 i0 ~& G% ]
- targets: ['111.231.143.40:9090']6 A$ K" U8 ]: @9 @2 B1 J, j* I
- job_name: 'node_exporter'
, O; W3 P1 R1 n. u' x static_configs:' z9 a8 I H, S; @7 k% ^
- targets: ['stor01.cre.io:9100']. c8 a( l7 |* X) P3 Z9 p% y
- targets: ['stor02.cre.io:9100']' |" x! b( e% d+ z% D
- targets: ['stor03.cre.io:9100']; U! ~3 G3 g8 c: i! q: R
- job_name: 'ceph'$ a. x: r2 C/ e! E$ S$ a
# honor_labels: true- P! d2 p. c. p* Y) H4 w
static_configs:
3 d3 A2 }3 K5 D2 _4 w# O" w: j - targets: ['stor02.cre.io:9283']4 u' f1 R- D6 J: A( ~/ k3 P' T
注意事项:) e" @7 ]' P4 c9 c& a# u+ |
1.job_name=node_exporter设置ceph集群的3个主机节点,job_name=ceph设置manager所在节点的主机名和Prometheus模块的端口;
" ^7 w$ Z1 O4 e# b S1 b 2.注意prometheus中的targets中要写主机的FQDN格式的主机名,否者ceph dashboard中host details中不能正常显示监控数据,因为ceph dashboard是使用FQDN格式的主机名查询监控信息,如果prometheus中写的是IP会导致查询不到;而grafana使用IP查询,所以在grafana中不会有这种错误;
; }: c* ^$ w2 t" v& } 3.honor_labels=true必须有且设置为true,否者会导致CephDashbaord中显示grafana某些面板没有数据出现(这个待验证,个人认为可以设置此参数);
; u, r3 E( D; X9 S4 P 4.如果ceph集群中部署了多个manager,需要在job_name=ceph中添加多个targets将所有magr的地址都写上;(本ceph集群只部署了一个mgr)9 _ D2 |/ U+ v) ^! g
~]# systemctl daemon-reload1 v% g. y6 \5 [: E
~]# systemctl start prometheus && systemctl enable prometheus #设置开启自启
1 m3 I# L3 b2 z" L% ]6 p验证配置是否抓取到数据:
: d& S) l) ~1 O) S7 {4 F 登录prometheus地址:http://192.168.10.10:9090,查看Targets页面上的prometheus、3个node、ceph mgr是否都是UP的即可: |
|