ZABBIXプリンタを監視し、自動的に監視項目を更新

いいえ監視は、これは知恵で、運用・保守ません。

ZABBIX強力な自明ここで、あなたは終わりを見るためにあなたの心を置けば、私たちは何かを得る必要があり、みんなのアイデアに触発され、手の解放の非常に一般的な要件今日、運用、保守を解決するためにそれを使用することを教えます:

簡単に言えば要件を紹介:

賃貸よりも購入するので、今では多くの企業が貸手に消耗品のタイムリーな交換を通知し、消耗品の使用を確認するために、月スキャナごとに、プリンタをリースしている、上司はそうで毎月の印刷量を知る必要があり、かつ、

多機能プリンタは、多くのユニットであれば、それことを、言って良いですか?あなたは以下のジレンマがありました:

手動で紙の書類やウェブプリンタスプール印刷部数や消耗品の使用状況を表示するにはログインを印刷するプリンタの前に行くための月刊必要があります。

私たちは、スキャナの使用状況およびサービスプロバイダーの単一の毎月の請求書に物資を送るために必要があります。

毎月の利用統計を手動でボス検査の報告書を作成する必要があります。

置換されない備品は、作業の遅れにつながる苦情文句、叫んで人事部門のためにオフに導きました。

契約の署名とサプライヤーので、追加料金で、この数を超えた、9K /月プリントランをされ評価され、多くの場合は、通常の廃棄物を使用して終了しますが終了していません

定格運転・保守の80%に達した部数が自動的の異常行動のタイムリーな見直しを印刷するように指示されます(または上司が、この需要に直接発行)、アウトハイライトにあなたの存在の価値をした場合。


だから、Zabbixはあなたを助けることができます。

しかし、さらにいくつかのトリッキーな操作を行うも、ZABBIXの使用に対処します:

例えば、直接取得して、SNMP、プリンタ印刷の実行は、現在の累積値に出荷され、運用・保守や上司は、実際の月額(あなたは上司が2ヶ月スキャナに電卓を保持期待することはできませんを参照してくださいする必要があります減算)、

各スキャナが終了した後ので、スキャナはクリアする必要があります。

プリンタは、サービスプロバイダである、あなたが清算の目的を達成するために現在のスキャナを失うことに数式を使用し、上記ZABBIXでのみ手と足、その後、各月クリアするために行くことができない、我々はまた、月に行っています痛み;

だから、背中を自動化するスクリプトを紹介します見て我慢して。


最初のステップは:今は、SNMPのビジネス機器は、私が唯一それがIT部門に混在したくなかったと言うことができない場合は、プリンタのSNMPサービスを回し、そして小さなホームルータ、大型機器のシスコの何百万人はこれを持っています:

例えば、当社のサムスンK3250NRプリンタで:

写真.PNG

もちろん、それはまた、SNMPv3のを開くためにトラブルを取ったことができます。


ZABBIXは、監視ホストを作成してログイン:

写真.PNG

通过查询打印机官方的SNMP MIB文档或者使用snmpwalk分析OID监控项(玩SNMP要是不会这些,下面也不用看了),找到需要的监控项键值:

监控墨粉耗材使用量:

写真.PNG

监控当前累计印数(这个通常不能清零,否则供应商还吃什么)

写真.PNG

查看数据采集情况:

图片.png

这样打印机的一举一动就被监控起来了,但是手工活一点没少,我这人很懒,我连zabbix都不想去看,供应商我也不想去找,电脑能够自动完成的事干嘛要人去惦记?

我只想,每月头,它自动发送抄数和耗材使用情况给供应商并CC一份给我就好,遇到耗材低的时候自己出邮件通知供应商来上门更换。

哦,对了,三星高级打印机有自动定时发送报表邮件功能,但是,呵呵,这个安卓固件实在太烂,测试时候是成功的,过不了多久就罢工,真心没法儿指望;

对的,Linux的任务计划可以做到,每月一号自动抄数,耗材还好说,印数是个累计值,抄数完毕还要从当前抄数自动从零计数并反映到zabbix里面,这个就需要一点技巧;

这里使用zabbix 提供的API在抄数的同时,将当前累计抄数减掉并更新监控项,不要我每个月去手工改监控项:

对的,就是实现下面这个监控项的公式自动更新(我也是懒得可以):

图片.png

上点干货,在linux下面创建一个python脚本,并加入crontab里面去定时运行:

# !/usr/bin/python3

import smtplib,time
from email.mime.text import MIMEText
from email.header import Header
import subprocess

bill_month=time.strftime('%b', time.localtime())
check_time=time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())

last_month = time.localtime()[1]-1
date = time.strptime(str(last_month),'%m')
last_month=time.strftime('%m',date)

def run_cmd(cmd):
    result_str=''
    process = subprocess.Popen(cmd, shell=True,
              stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    result_f = process.stdout
    error_f = process.stderr
    errors = error_f.read()
    if errors: pass
    result_str = result_f.read().strip()
    if result_f:
       result_f.close()
    if error_f:
       error_f.close()
    return result_str

cmd = 'snmpwalk -v 1 -c public 192.168.130.25 .1.3.6.1.2.1.43.10.2.1.4.1.1'  #根据自己的情况修改下参数
result = str(run_cmd(cmd))
print_count = ((result.split('Counter32: '))[1]).rstrip("'")
print(print_count)

cmd2 = 'snmpwalk -v 1 -c public 192.168.130.25  .1.3.6.1.4.1.236.11.5.1.1.3.22.0'
result2 = str(run_cmd(cmd2))
SupplyUnit = ((result2.split('INTEGER: '))[1]).rstrip("'")
#print(SupplyUnit)

cmd3 ='/root/K3250NR/item_update.sh ' +  print_count  #这里调用外部shell脚本更新zabbix监控项
result3 = str(run_cmd(cmd3))
#print(result3)

title = "<table border='0' cellspacing='20' align='center' style='font-size:16px;word-break: keep-all'><tr><th colspan='2'><font face='verdana' color='green'>打印机每月抄数("+last_month+"月)</th></tr>"
head = "<tr bgcolor='3F48CC'><th><font color='ffffff'>三星K3250NR打印机</font></th><th><font color='ffffff'>本 次 抄 数</font></th></tr>"
sent_content ="<table bgcolor='E2FFC5' border='1' align='center' cellspacing='5'><tr><td>" +  title + head +"<tr><td>打印机印数</td><td>" +print_count + '</td></tr><tr><td>墨粉仓剩余</td><td>'+ SupplyUnit +'%</td></tr></table></td></tr></table>'

mail_host = "你的邮箱服务地址"
mail_user = "发送的邮箱账号"
mail_pass = "邮箱密码"

sender = '发送的邮箱账号'
receivers = ['自己的邮箱和供应商邮箱群组']

message = MIMEText(sent_content, 'html', 'utf-8')
message['From'] = Header("Printer Admin", 'utf-8')
message['To'] = Header("All IT Colleagues", 'utf-8')



subject = '打印机每月抄数('+last_month+'月)'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("sent success")
except smtplib.SMTPException:
    print("Error: sent faild")

贴上

item_update.sh
token=$(./zabbix_api.sh) #这里又调用外部脚本zabbix_api.sh去获取API的token ,下面如果连itemid都不知道怎么改也就不用玩zabbix了
ZBX='zabbix服务器的IP地址'
params="last(\"K3250NR:prtMarkerLifeCount\")-'$1'"
curl -s -X POST -H 'Content-Type:application/json' -d '
{
    "jsonrpc": "2.0",
    "method": "item.update",
    "params": {
        "itemid": "39311",
        "params": "last(\"K3250NR:prtMarkerLifeCount\")-'$1'"
    },
    "id": 2,
    "auth": "'$token'"
}' http://$ZBX/api_jsonrpc.php

贴上

zabbix_api.sh
#/ binに/ bashの!
管理者=管理#zabbix用户
= ZABBIX#密码渡す
ZBX = 'XXXX' #のZABBIXサーバ的IP地址
カール-s -X POST -H 'のContent-Typeを:アプリケーション/ JSONは' '-d 
{ 
"JSONRPC": "2.0"、
"方法": "user.login"、
"paramsは":{ 
"ユーザ": " '$管理'"、
"パスワード": " '$パス'" 
}、
"ID": 1、
"AUTH":ヌル
} 'のhttp://$ZBX/api_jsonrpc.php | grepを-Po'結果[ ":] + \ K [^"] +」

最終的な効果は、メッセージが受信されることです。

图片.png

ZABBIX監視項目は自動的にカウント更新されます。

图片.png

どのgrafana数で見ることができるの痕跡をクリアされます。

图片.png

また、すぐに業者に通知し、低用品、アラームメッセージの使用に興味がある可能性があり、これはZABBIXのためのケーキの一部ではないでしょうか?

图片.png


おすすめ

転載: blog.51cto.com/kingda/2425706