ceph-状态监测-脚本
http://www.tang-lei.com/2018/06/05/ceph-%E7%8A%B6%E6%80%81%E7%9B%91%E6%B5%8B-%E8%84%9A%E6%9C%AC/
为了能够试试获取ceph集群状态,以期发生故障,可以及时知晓,及时处理。这里结合公司使用的owl监控编写的python脚本,如果使用其他或者crontab,可以酌情修改返回格式。
cat ceph_status.py
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
 | 
 #!/usr/bin/python 
# -*- coding: utf-8 -*- 
import os 
import re 
import subprocess 
import sys 
try: 
import simplejson as json 
except: 
import json 
##获取集群状态 HEALTH_ERR、HEALTH_WARN、HEALTH_OK 
def get_ceph_status(): 
p = subprocess.Popen("ceph -s -f json", shell=True,stdout=subprocess.PIPE) 
j_data = json.loads(p.stdout.read()) 
status = j_data.get('health').get('overall_status') 
mark = 0 ##正常 
if status == 'HEALTH_ERR': 
mark = 1 
if status == 'HEALTH_WARN': 
mark = 2 
if status == 'HEALTH_OK': 
mark = 0 
print {'HEALTH':mark} 
return {'HEALTH':mark} 
##检查osd使用率 
def get_osd_usage(): 
p = subprocess.Popen("ceph osd df | awk '{print $1,$7}'", shell=True, stdout=subprocess.PIPE) 
osds = p.stdout.readlines() 
dicts = {} 
for o in osds: 
array = o.strip().split(" ") 
try: 
id = int(array[0]) 
dicts[array[0]]=array[1] 
except ValueError: 
print "Not number" 
j_data = json.dumps(dicts, indent=4) 
print j_data 
return j_data 
##获取osd状态 0表示没有down的osd, 1表示有down 
def get_osd_status(): 
##p = subprocess.Popen("ceph osd tree | awk '{print $4}' |grep down", shell=True, stdout=subprocess.PIPE) 
##osds_len = len(p.stdout.read()) 
##print osds_len 
##if osds_len == 0: 
## return 0 
##else: 
## return 1 
p = subprocess.Popen("ceph osd stat -f json", shell=True, stdout=subprocess.PIPE) 
data = json.loads(p.stdout.read()) 
if data.get('num_osds') == data.get('num_up_osds') == data.get("num_in_osds"): 
print 0 
return 0 
else: 
print 1 
return 1 
##获取pg状态 0表示 active+clean, 1表示有问题 
def get_pg_status(): 
p = subprocess.Popen("ceph pg stat -f json", shell=True, stdout=subprocess.PIPE) 
data = json.loads(p.stdout.read()) 
if len(data.get("num_pg_by_state")) > 1: 
print 1 
return 1 
else: 
print 0 
return 0 
##获取osd延迟信息 
def get_osd_latency(): 
p = subprocess.Popen("ceph osd perf |awk '{print $1,$3}'", shell=True, stdout=subprocess.PIPE) 
return _change_data_format(p) 
##数据格式转换 
def _change_data_format(p): 
osds = p.stdout.readlines() 
dicts = {} 
for o in osds: 
array = o.strip().split(" ") 
try: 
id = int(array[0]) 
dicts[array[0]]=array[1] 
except ValueError: 
print "Not number" 
j_data = json.dumps(dicts, indent=4) 
print j_data 
return j_data 
##mon 状态 
def get_mon_status(): 
p = subprocess.Popen("ceph mon_status", shell=True, stdout=subprocess.PIPE) 
usage = p.stdout.read() 
json_usage = json.loads(usage) 
print json_usage 
return json_usage 
##ceph集群所有磁盘使用率 
def get_ceph_disk_usage(): 
p = subprocess.Popen("ceph df -f json", shell=True, stdout=subprocess.PIPE) 
usage = p.stdout.read() 
json_usage = json.loads(usage) 
print json_usage 
return json_usage 
if __name__ == '__main__': 
inputs = sys.argv[1] 
if inputs == '1': 
get_ceph_status() 
if inputs == '2': 
get_osd_usage() 
if inputs == '3': 
get_osd_status() 
if inputs == '4': 
get_osd_latency() 
if inputs == '5': 
get_pg_status() 
if inputs == '6': 
get_mon_status() 
if inputs == '7': 
get_ceph_disk_usage() 
 | 
ceph-状态监测-脚本的更多相关文章
- 如何编写LVS对Real Server的健康状态检测脚本
		
简介:Linux 虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等 ...
 - linux系统负载状态检查脚本
		
为了便于分析问题,编写了一个linux状态检查脚本,脚本可放置任意目录,脚本执行检测后会输出日志记录到当前目录下.直接执行脚本可用于一次检测,可通过日志进行分析.如果需要长时间监测,可执行-x参数,脚 ...
 - intouch与PLC之间通讯状态监测和设置
		
intouch与PLC进行通讯状态监测中,一般做法需要PLC来实施主动脉冲计数,或者bool变化来实现.本文通过上位机自带参数设置,实现对intouch通讯状态监视,将画面恢复初始状态,并及时弹窗报警 ...
 - 【转载】     GPU状态监测 nvidia-smi 命令详解
		
原文地址: https://blog.csdn.net/huangfei711/article/details/79230446 ----------------------------------- ...
 - Tomcat 项目部署、账户配置、状态监测
		
tomcat部署项目 方式一.自动部署(最常用) 直接把war包或部署的文件夹放到webapps下. tomcat启动后会自动监听webapps下的文件|目录,放入打包好的项目会自动部署,移除打包好的 ...
 - 检查服务器主从状态的脚本-check_server_state.sh
		
分别检查服务器在Master/Slave状态下,各项服务是否正常,否则报警: 原来使用keepalived每隔1分钟调用,由于执行结果对keepalived的weight参数有影响,所以移动到外部,使 ...
 - python MySQL-Slave从服务器状态检测脚本
		
#!/bin/bash mysql -e "show slave status\G" > mysql_status.txt array=($(egrep 'Slave_IO_ ...
 - ceph状态信息靠谱查询
		
1)检查集群的状态汇总信息: [root@haha1 clouder]# ceph -s cluster 8e136e25-77ab-4e0b-b24b-232a7b466cfe health HEA ...
 - IIS状态监测(如果状态错误则重启IIS)
		
步骤: 1:建立健康监测文件.文件内容随意,这里以healthcheck.aspx命名,内容是<span>hellow word</span> 2:利用vbs语言执行IIS重启 ...
 
随机推荐
- FCKEditor添加字体
			
默认情况下,FCKEditor在进行文本编辑时,无法使用中文字体.自个摸索了下:打开 fckconfig.js 文件 找到第154行(应该是),会发现:FCKConfig.FontNames = 'A ...
 - HBase备份还原OpenTSDB数据之Export/Import(增量+全量)
			
前言 本文基于伪分布式搭建 hadoop+zookeeper+hbase+opentsdb之后,文章链接:https://www.cnblogs.com/yybrhr/p/11128149.html, ...
 - Python算法每日一题--001--给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素
			
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
 - Songwriter CF1252-E(贪心)
			
题意: 已知一个序列a,问能否将a映射到序列b,使得相邻元素之间的大小关系不变(三种),且相邻元素不能相差超过k,且每个元素范围在[L,R]内.如果能,求字典序最小的b. 思路: 可以设b[1]的范围 ...
 - 图解Http阅读笔记(二)
			
简单的HTTP协议 HTTP是一种不保存状态,即无状态(stateless)协议.HTTP 协议自身不对请求和响应之间的通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不 ...
 - Collection -集合祖宗的常用七种共性方法
			
package cn.learn.collection; import java.util.ArrayList; import java.util.Collection; /* 在java.util. ...
 - C#=> 栈模仿堆的操作
			
//原理,利用两个栈,互相作用,来模仿堆的效果,先进先出.. using System; using System.Collections.Generic; using System.Linq; us ...
 - Macaca的Python的api整理
			
整理了下Macaca的API,做成思维脑图,方便阅览. WebDriver 安装 pip install wd git clone https://github.com/macacajs/wd.py. ...
 - SpringMvc.xml
			
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
 - java_第一年_JavaWeb(2)
			
HTTP协议 HTTP协议——超文本传输协议,用于定义web浏览器和web服务器之间数据交换的过程,遵守一定的通讯的格式: HTTP请求——包括请求行和多个信息头 请求行:包含请求方式(常用的GET. ...