lambdaる(非AWS)
0. 内容: Lesft个文件。
我本来想要使用lambda,但不知道在哪里使用,纠结了一阵子,但当我想要添加一些简单的监视时,我尝试了一下。
lambda非常适合像监视这样的处理,但是要创建一个方法或者其他的处理方法是没有问题的。
当你只需要做一点点独特的监视时,可以运行这个脚本。运行方式可以是cron或者守护进程,具体根据情况而定。
1. 条件
监视对象和监视项目通过“yaml”文件进行管理
*使用SNMP获取监视项目
例(监视对象=mib.yml)
MYSQL:
error:
aborted_connects: 1.3.6.1.4.1.2021.8.1.101.1
aborted_clients: 1.3.6.1.4.1.2021.8.1.101.2
down:
uptime: 1.3.6.1.4.1.2021.8.1.101.3
iodrive:
InfoStatus1: 1.3.6.1.4.1.30018.1.2.1.1.1.12.12
InfoStatus2: 1.3.6.1.4.1.30018.1.2.1.1.1.12.17
監控項目等於host.yml。
DB:
db001: 192.168.1.10
db002: 192.168.1.11
db003: 192.168.1.12
数据存储
為了能夠比較超過閾值且已復原的現值,與障礙時的值進行保存,所以無需使用關聯式資料庫(RDB),僅需使用Key/Value存儲即可。本次將使用Memcache。
成为中国土生土长的财富2022。
#!/usr/bin/ruby
# coding: utf-8
require 'snmp'
require 'yaml'
require_relative 'tool'
### current directory yaml file load
### Target Host
common_list = YAML.load_file('host.yml')
list_db = common_list["DB"]
### Target Parameter
common_oid = YAML.load_file('mib.yml')
oid_mysql_ab = common_oid["MYSQL"]["error"]
### Backup Info
bkserver = "db002"
bkstart = '03:30'
bkend = '03:35'
### aborted_clients
### aborted_connectss
lwmark2 = 500
### Check LogFile
error_files = "general_mysql.log"
### common procedure
cking_ab = lambda do | targetlist, targetoid ,logs|
targetlist.each do |target|
begin
SNMP::Manager.open(:host => target[1], :Community => 'public', :timeout => 1) do |manager|
targetoid.each do |mib|
response = manager.get([mib[1]])
response.each_varbind do |vb|
if ( vb.value.to_i - MemGet.instance.mem_get(target[0],mib[0]).to_i ) >= lwmark2
### send alert mail
Tool.new( target[0].to_s + "\s MySQL abort status problem ?\s" + mib[0],"../mail_bady/body_mysql_abort.txt").alert_mail
MemSet.instance.mem_set(target[0],mib[0],vb.value.to_i)
else
### checking log
time = Time.new
file = File.open(logs, "a")
file.write("#{time}\t#{target[0]}\t#{mib[0]}\tMySQL abort status No problem!\n")
MemSet.instance.mem_set(target[0],mib[0],vb.value.to_i)
end
end
end
end
rescue => ex
### send alert mail
ToolKit.new( target[0].to_s + "\s#{ex}","../mail_bady/body_connect.txt").alert_mail
next
end
end
end
## Checkin MySQL connection
checking_ab.call(list_db, oid_mysql_ab, error_files)
在发送邮件的部分和使用Memcache的Set/Get的部分,使用了在”tool”中定义的方法。
class MemGet
include Singleton
attr_accessor :x, :y
def initialize
@x = x
@y = y
end
def mem_get(x,y)
cache = MemCache.new('127.0.0.1:11211')
cache.get(x+y)
end
end
class MemSet
include Singleton
attr_accessor :x, :y, :z
def initialize
@x = x
@y = y
@z = z
end
def mem_set(x,y,z)
cache = MemCache.new('127.0.0.1:11211')
cache[x+y] = z
end
end
邮件正文需要另外准备。
其他处理也可以类似地编写。