zabbix 监控ssl证书是否过期

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

cd /usr/lib/zabbix/externalscripts

#cat check_ssl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#/bin/bash
host=$1
port=$2
end_date=`openssl s_client -host $host -port $port -showcerts </dev/ null  2>/dev/ null  |
           sed -n  '/BEGIN CERTIFICATE/,/END CERT/p'  |
       openssl x509 -text 2>/dev/ null  |
       sed -n  's/ *Not After : *//p' `
if  [ -n  "$end_date"  ]
then
     end_date_seconds=`date  '+%s'  --date  "$end_date" `
# date指令format字符串时间。
     now_seconds=`date  '+%s' `
     echo  "($end_date_seconds-$now_seconds)/24/3600"  | bc
fi

zabbix 界面配置如下

wKiom1nAjRfhHRFmAAPNQptYbCc027.png

check_rabbitmq_stats

cat check_rabbitmq_stats

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#/bin/bash
host=$1
port=$2
end_date=`openssl s_client -host $host -port $port -showcerts </dev/ null  2>/dev/ null  |
           sed -n  '/BEGIN CERTIFICATE/,/END CERT/p'  |
       openssl x509 -text 2>/dev/ null  |
       sed -n  's/ *Not After : *//p' `
if  [ -n  "$end_date"  ]
then
     end_date_seconds=`date  '+%s'  --date  "$end_date" `
# date指令format字符串时间。
     now_seconds=`date  '+%s' `
     echo  "($end_date_seconds-$now_seconds)/24/3600"  | bc
fi
[root@it-zabbix03 externalscripts]#
[root@it-zabbix03 externalscripts]#
[root@it-zabbix03 externalscripts]#
[root@it-zabbix03 externalscripts]#
[root@it-zabbix03 externalscripts]#ls
check_rabbitmq_stats  check_ssl  digium_active_calls  digium_active_ports  mikoomi-mongodb-plugin.php  mikoomi-mongodb-plugin.sh  rbl.check  rblwatch.py  rblwatch.pyc  ronglianyun.php  ronglianyun.sh
[root@it-zabbix03 externalscripts]#cat check_rabbitmq_stats
#!/usr/bin/python
 
import sys
import socket
import re
import ZabbixSender
#from ZabbixSender.ZabbixSender import ZabbixSender
 
import json
import socket
import urllib2
import requests
from  collections import defaultdict
 
class  RabbitMQAPI( object ):
     '' 'Class for RabbitMQ Management API' ''
 
     def __init__(self, username= 'guest' , password= 'guest' , hostname= '' ,
                  port=15672, interval=60):
         self.username = username
         self.password = password
         self.hostname = hostname or socket.gethostname()
         self.port = port
         self.stat_interval = interval
 
     def call_api(self, path):
         '' 'Call the REST API and convert the results into JSON.' ''
         url =  'http://{0}:{1}/api/{2}' .format(self.hostname, self.port, path)
         response = requests. get (url, auth=(self.username, self.password))
         '' '
         password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
         password_mgr.add_password(None, url, self.username, self.password)
         handler = urllib2.HTTPBasicAuthHandler(password_mgr)
         '' '
         return  json.loads(response.content)
 
     def get_message_details(self):
         '' 'get messages overview' ''
         messages = {}
         cluster = self.call_api( 'overview' )
         messages[ 'cluster.messages_ready' ] = cluster. get ( 'queue_totals' , {}). get ( 'messages_ready' ,0)
         messages[ 'cluster.messages_unacknowledged' ] = cluster. get (
             'queue_totals' , {}). get ( 'messages_unacknowledged' , 0)
         messages[ 'cluster.messages_deliver_get' ] =  float (format(cluster. get ( 'message_stats' , {}). get (
             'deliver_get_details' ,{}). get ( 'rate' ,0), '.2f' ))
         messages[ 'cluster.messages_publish' ] =  float (format(cluster. get ( 'message_stats' , {}). get (
             'publish_details' ,{}). get ( 'rate' , 0),  '.2f' ))
         messages[ 'cluster.messages_redeliver' ] =  float (format(cluster. get ( 'message_stats' , {}). get (
             'redeliver_details' ,{}). get ( 'rate' , 0),  '.2f' ))
         messages[ 'cluster.messages_ack' ] =  float (format(cluster. get ( 'message_stats' ,{}). get (
             'ack_details' ,{}). get ( 'rate' ,0),  '.2f' ))
         return  messages
 
     def get_nodes_details(self):
         detail = defaultdict( float )
         for  node  in  self.call_api( 'nodes' ):
             name = node[ 'name' ].split( '@' )[1]
             if  name == self.hostname.split( '.' )[0]:
                 detail[ 'nodes.proc_used' ] = node[ 'proc_used' ]
                 detail[ 'nodes.proc_total' ] = node[ 'proc_total' ]
                 detail[ 'nodes.proc_used_ratio' ] =format(
                     node[ 'proc_used' ]/ float (node[ 'proc_total' ]) * 100,  '.2f' )
                 detail[ 'nodes.fd_used' ] = node[ 'fd_used' ]
                 detail[ 'nodes.fd_total' ] = node[ 'fd_total' ]
                 detail[ 'nodes.fd_used_ratio' ] = format(
                     node[ 'fd_used' ]/ float (node[ 'fd_total' ]) * 100,  '.2f' )
                 detail[ 'nodes.sockets_used' ] = node[ 'sockets_used' ]
                 detail[ 'nodes.sockets_total' ] = node[ 'sockets_total' ]
                 detail[ 'nodes.sockets_used_ratio' ] = format(
                     node[ 'sockets_used' ]/ float (node[ 'sockets_total' ]) * 100,  '.2f' )
                 detail[ 'nodes.mem_used' ] = format(
                     node[ 'mem_used' ]/1024.0/1024.0, '.2f' )
                 detail[ 'nodes.mem_limit' ] = format(
                     node[ 'mem_limit' ]/1024.0/1024.0, '.2f' )
                 detail[ 'nodes.mem_used_ratio' ] = format(
                     node[ 'mem_used' ]/ float (node[ 'mem_limit' ]) * 100,  '.2f' )
                 detail[ 'nodes.disk_free' ] = format(
                     node[ 'disk_free' ]/1024.0/1024.0/1024.0, '.2f' )
                 detail[ 'nodes.disk_free_limit' ] = format(
                     node[ 'disk_free_limit' ]/1024.0/1024.0/1024.0, '.2f' )
                 detail[ 'nodes.disk_free_ratio' ] = format(
                     node[ 'disk_free' ]/ float (node[ 'disk_free_limit' ]),  '.2f' )
         return  detail
 
     def get_channels_details(self):
         channels = defaultdict( float )
         for  channel  in  self.call_api( 'channels' ):
             channels[ 'cluster.channels' ] += 1
             name = channel[ 'node' ].split( '@' )[1]
             if  name == self.hostname.split( '.' )[0]:
                 channels[ 'nodes.channels' ] += 1
                 if  'nodes.channels_blocked'  not  in  channels:
                     channels[ 'nodes.channels_blocked' ] = 0
                 if  'client_flow_blocked'  in  channel and channel[ 'client_flow_blocked' ]:
                     channels[ 'nodes.channels_blocked' ] += 1
                 else :
                     channels[ 'nodes.channels_blocked' ] += 0
                 channels[ 'nodes.messages_ack' ] +=  float (format(channel. get (
                     'message_stats' ,{}). get ( 'ack_details' ,{}). get ( 'rate' ,0),  '.2f' ))
                 channels[ 'nodes.messages_deliver_get' ] +=  float (format(channel. get (
                     'message_stats' ,{}). get ( 'deliver_get_details' ,{}). get ( 'rate' ,0),  '.2f' ))
                 channels[ 'nodes.messages_redeliver' ] +=  float (format(channel. get (
                     'message_stats' ,{}). get ( 'redeliver_details' ,{}). get ( 'rate' ,0),  '.2f' ))
                 channels[ 'nodes.messages_publish' ] +=  float (format(channel. get (
                     'message_stats' ,{}). get ( 'publish_details' ,{}). get ( 'rate' ,0),  '.2f' ))
         return  channels
 
     def get_queues_details(self):
         queues = defaultdict( int )
         max_queue_message_ready = 0
         max_queue_message_ready_queue =  ''
         max_queue_message_unack = 0
         max_queue_message_unack_queue =  ''
         for  queue  in  self.call_api( 'queues' ):
             queues[ 'cluster.queues' ] += 1
             queues[ 'cluster.consumers' ] += queue[ 'consumers' ]
             vhost_name = queue[ 'vhost' ].replace( '.' '-' )
             if  vhost_name ==  '/' :
                 vhost_name =  'default'
             node_name = queue[ 'node' ].split( '@' )[1]
             queue_name = queue[ 'name' ].replace( '.' '-' )
             if  node_name == self.hostname.split( '.' )[0]:
                 queues[ 'nodes.consumers' ] += queue[ 'consumers' ]
                 queues[ 'nodes.queues' ] += 1
                 queues[ 'nodes.messages_ready' ] += \
                     queue. get ( 'messages_ready' , 0)
                 queues[ 'nodes.messages_unacknowledged' ] += \
                     queue. get ( 'messages_unacknowledged' ,0)
             queues[ 'queues_'  + vhost_name +  '_'  + queue_name +  '.messages_ready' ] = \
                 queue. get ( 'messages_ready' ,0)
             if  queue. get ( 'messages_ready' , 0) >= max_queue_message_ready:
                 max_queue_message_ready = queue. get ( 'messages_ready' ,0)
                 max_queue_message_ready_queue = queue_name
             queues[ 'queues_'  + vhost_name +  '_'  + queue_name +  '.messages_unacknowledged' ] = \
                 queue. get ( 'messages_unacknowledged' , 0)
             if  queue. get ( 'messages_unacknowledged' ,0) >= max_queue_message_unack:
                 max_queue_message_unack = queue. get ( 'messages_unacknowledged' , 0)
                 max_queue_message_unack_queue = queue_name
             queues[ 'queues_'  + vhost_name +  '_'  + queue_name +  '.messages_ack' ] =  float (format(queue. get (
                 'message_stats' ,{}). get ( 'ack_details' ,{}). get ( 'rate' ,0),  '.2f' ))
             queues[ 'queues_'  + vhost_name +  '_'  + queue_name +  '.messages_deliver_get' ] =  float (format(queue. get (
                 'message_stats' ,{}). get ( 'deliver_get_details' ,{}). get ( 'rate' ,0),  '.2f' ))
             queues[ 'queues_'  + vhost_name +  '_'  + queue_name +  '.messages_publish' ] =  float (format(queue. get (
                 'message_stats' ,{}). get ( 'publish_details' ,{}). get ( 'rate' ,0),  '.2f' ))
             queues[ 'queues_'  + vhost_name +  '_'  + queue_name +  '.messages_redeliver' ] =  float (format(queue. get (
                 'message_stats' ,{}). get ( 'redeliver_details' ,{}). get ( 'rate' ,0),  '.2f' ))
         queues[ 'queues_max-queue-message-ready' ] = max_queue_message_ready
         queues[ 'queues_max-queue-message-ready-queue' ] = max_queue_message_ready_queue
         queues[ 'queues_max-queue-message-unack' ] = max_queue_message_unack
         queues[ 'queues_max-queue-message-unack-queue' ] = max_queue_message_unack_queue
         return  queues
 
     def get_connections_details(self):
         connections = defaultdict( int )
         for  connection  in  self.call_api( 'connections' ):
             connections[ 'cluster.connections' ] += 1
             node_name = connection[ 'node' ].split( '@' )[1]
             if  node_name == self.hostname.split( '.' )[0]:
                 connections[ 'nodes.connections' ] += 1
                 key =  'nodes.connections_blocked'
                 if  key not  in  connections:
                     connections[key] = 0
                 if  'last_blocked_age'  in  connection and \
                         connection[ 'last_blocked_age' ] !=  'infinity'  and \
                         connection[ 'last_blocked_age' ] <= self.stat_interval:
                     connections[key] += 1
                 else :
                     connections[key] += 0
         return  connections
 
     def get_bindings_details(self):
         bindings = defaultdict( int )
         for  binding  in  self.call_api( 'bindings' ):
             bindings[ 'cluster.bindings' ] += 1
         return  bindings
 
     def get_stats(self):
         stats = {}
         stats.update(self.get_message_details())
         stats.update(self.get_nodes_details())
         stats.update(self.get_channels_details())
         stats.update(self.get_queues_details())
         stats.update(self.get_connections_details())
         stats.update(self.get_bindings_details())
         return  stats
 
if  __name__ ==  '__main__' :
     set  zabix server
     zabbix =  'zabbix.test.com'
     sender = ZabbixSender(zabbix)
     # monitor key
     host = sys.argv[1]
     port = sys.argv[2]
 
     # gethostname  if  ip
     ipr = re.compile(r '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$' )
     if  ipr.match(host):
         result = socket.gethostbyaddr(host)
         host   = result[0]
         if  re.search( '.' , host):
             host = host.split( '.' )[0]
 
     api = RabbitMQAPI(username= 'zabbix' , password= 'zabbix' ,hostname=host, port=port)
     stats = api.get_stats()
 
     for  key  in  stats:
         sender.AddData(host, "rabbitmq_" +key, stats[key])
     sender.Send()
     print 1


rbl.check

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
#fileencoding: utf-8
#Author: 
 
from  rblwatch import RBLSearch
import sys
 
ip = sys.argv[1]
 
# Do the lookup (for smtp.gmail.com)
searcher = RBLSearch(ip)
 
# Display a simply formatted report of the results
results = searcher.get_results()
if  results ==  "DNSBL Report" :
     print 0
else :
     print results
# Use the result data for something else
#result_data = searcher.listed







      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1966611,如需转载请自行联系原作者






相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
1月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
32 2
zabbix agent集成percona监控MySQL的插件实战案例
|
2月前
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
77 0
|
4月前
|
监控 数据库 Docker
Zabbix监控神通数据库教程
**摘要:** 本文介绍了如何使用Docker安装和配置神舟通用数据库,并利用Zabbix进行监控。首先,通过Docker安装数据库镜像,启动容器并映射端口。接着,使用默认凭证连接数据库并验证安装。然后,将数据库的Python模块和库文件复制到主机,并安装Python3.5及相应模块,创建外部检查脚本以实现Zabbix的监控功能。示例展示了查询数据库版本的监控指标配置。最后,提到了监控结果的界面展示,并邀请读者探索更多Zabbix监控技巧。
57 0
Zabbix监控神通数据库教程
|
3月前
|
监控 关系型数据库 应用服务中间件
Linux zabbix监控 软件的安装
Linux zabbix监控 软件的安装
|
5月前
|
监控 关系型数据库 MySQL
zabbix 监控mysql服务
zabbix 监控mysql服务
74 0
zabbix 监控mysql服务
|
5月前
|
安全 网络安全 数据安全/隐私保护
SSL证书过期后网站还能正常访问吗
SSL证书过期后,网站仍可访问,但浏览器会出现警告,降低用户信任度,增加数据安全风险。过期可能导致安全性下降、信任问题、浏览器限制及合规性风险。管理员需关注证书有效期,及时续费或更换,并选择可靠提供商。
SSL证书过期后网站还能正常访问吗
|
5月前
|
数据采集 监控 数据库
请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
【2月更文挑战第25天】请问OceanBase社区版能否通过zabbix监控,然后将报错信息展现到grafana?
60 2
|
5月前
|
域名解析 安全 网络安全
使用Python自动检测SSL证书是否过期
使用Python自动检测SSL证书是否过期
147 0
|
5月前
|
监控 网络协议 Unix
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
centos7 zabbix安装客户端agent -配置监控远程主机 在需要监控的电脑上安装
163 0

推荐镜像

更多
下一篇
无影云桌面