Ad Widget

Collapse

Настройка мониторинга по HTTP

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • supp0rtmail2019
    Junior Member
    • Jan 2024
    • 1

    #1

    Настройка мониторинга по HTTP

    Всем привет!
    Я только недавно начал знакомится с zabbix и подошла очередь чтобы добавить свой NAS на ОС Alt-F в мониторинг Zabbix.
    Очень мало информации я нашёл в сети по тонкой настройке сбора и предобработки данных через "Агент HTTP", поэтому прошу помочь знатоков в данном деле.
    На данный момент я настраиваю "Шаблон" на сбор данных я прописал адрес NAS куда можно попасть без авторизации и получить нужные мне данные "http://192.168.1.135/cgi-bin/status.cgi", при проверки шаблона я получаю огромный список данных, но не пойму как достать их(предобработать) по отдельности чтобы начать мониторить, настроить триггеры и т.д.
    вот данные которые я получаю
    HTML Code:
    "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head profile="http://www.w3.org/2005/10/profile">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="icon" type="image/png" href="../dns-323.png">
    <title>Alt-F 1.0 Status Page</title>
    <style type="text/css">
    .bgl {text-align: center; font-weight: bold; width: 100px; }
    </style>
    <link rel="stylesheet" type="text/css" href="/scripts/dull/dull.css">
    <script type="text/javascript" src="/scripts/dull/dull.js"></script>
    </head>
    <body >
    <script type="text/javascript">
    var menu = new Array();
    var men = {label:"Logout", url:"/cgi-bin/logout.cgi"};
    menu.push(men);
    men = {label:"Status", url:"/cgi-bin/status.cgi"};
    menu.push(men);
    men = {label:"Shortcuts", smenu:[{item:"Add", url:""" onclick="return addbookmark()""},
    {item:"Remove", url:""" onclick="return rmbookmark()""},
    {item:"Remove All", url:""" onclick="return rmall()""},
    {item:"<hr>", url:"#"},
    ]};
    menu.push(men);
    men = {label:"Setup", smenu:[{item:"Host", url:"host.cgi "},
    {item:"Time", url:"time.cgi"},
    {item:"Mail", url:"mail.cgi"},
    {item:"Proxy", url:"proxy.cgi"},
    {item:"Hosts", url:"hosts.cgi"},
    {item:"Users", url:"usersgroups.cgi"},
    {item:"Debian", url:"debian.cgi"},
    {item:"Folders", url:"browse_dir.cgi?wind=no?browse=/mnt"},
    ]};
    menu.push(men);
    men = {label:"Disk", smenu:[{item:"Utilities", url:"diskutil.cgi"},
    {item:"Filesystems", url:"diskmaint.cgi"},
    {item:"RAID", url:"raid.cgi"},
    {item:"Partitioner", url:"diskpart.cgi"},
    {item:"Wizard", url:"diskwiz.cgi"},
    {item:"Quotas", url:"quota.cgi?admin=admin"},
    ]};
    menu.push(men);
    men = {label:"Services", smenu:[{item:"Network", url:"net_services.cgi"},
    {item:"System", url:"sys_services.cgi"},
    {item:"User", url:"user_services.cgi"},
    ]};
    menu.push(men);
    men = {label:"Packages", smenu:[{item:"Alt-F", url:"packages_ipkg.cgi"},
    {item:"Entware-ng", url:"packages_opkg.cgi"},
    {item:"ffp", url:"packages_ffp.cgi"},
    ]};
    menu.push(men);
    men = {label:"System", smenu:[{item:"Utilities", url:"sys_utils.cgi"},
    {item:"Settings", url:"settings.cgi"},
    {item:"Firmware", url:"firmware.cgi"},
    {item:"About", url:"about.cgi"},
    ]};
    menu.push(men);
    menuSetup("top","");
    </script>
    <div id="tt_help" class="ttip">Get a descriptive help</div>
    <div id="tt_settings" class="ttip"></div>
    <h2 class="title">Alt-F 1.0 Status Page <a href="../status_hlp.html" onmouseover="popUp(event,'tt_help')" onmouseout="popDown('tt_help')"><img src="../help.png" alt="help" border=0></a></h2>
    
    
    <noscript>
    <p class="error"><strong>
    JavaScript is needed by Alt-F web pages, and you don't have it enabled.<br>
    See <a href="http://www.enable-javascript.com" target="_blank">
    how to enable JavaSCript</a> on your browser.
    </strong></p>
    </noscript>
    <script type="text/javascript">
    arefresh = false
    function requestfromserver(target, refresh) {
    var req = new XMLHttpRequest();
    if (req == null)
    return;
    
    req.onreadystatechange = function() {
    if (req.readyState != 4) return; // only if req is "loaded"
    if (req.status != 200) return; // only if "OK"
    document.getElementById(target).innerHTML = req.responseText;
    delete req;
    if (arefresh == true && refresh != 0)
    setTimeout( function() {requestfromserver(target, refresh);}, refresh * 1000);
    }
    url="/cgi-bin/status.cgi?refresh=" + target
    req.open("GET", url, true);
    req.send();
    }
    
    function frefresh(obj) {
    arg = obj.checked == true ? "yes" : "no"
    
    if (arg == "yes") {
    arefresh = true
    requestfromserver('systems_st', 11)
    requestfromserver('network_st', 11)
    requestfromserver('disks_st', 13)
    requestfromserver('raid_st', 13)
    requestfromserver('mounted_filesystems_st', 17)
    requestfromserver('mounted_remote_filesystems_st', 17)
    requestfromserver('remotely_mounted_filesystems_st ', 19)
    requestfromserver('backup_st', 19)
    requestfromserver('filesystem_maintenance_st', 23)
    requestfromserver('printers_st', 23)
    requestfromserver('error_st', 31)
    requestfromserver('news_st', 59)
    }
    else
    arefresh = false
    }
    </script>
    <div id="st_tt" class="ttip">Checking this will refresh different sections in the page every 10 to 20 seconds.<br>
    This consumes CPU, so if you are waiting for something lengthly to accomplish<br>
    it will actually take more time if autorefresh is enabled.</div>
    <div id="error_st">
    </div>
    <div id="news_st">
    </div>
    <div id="systems_st">
    <fieldset><legend>System</legend>
    <table><tr>
    <td><div class="bgl">Temperature</div> <div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 62%;">
    <div class="meter-text" style="color: #000;">34.0&deg;C/93&deg;F</div>
    </div>
    </div></td>
    <td><div class="bgl">Fan speed</div> <div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 0%;">
    <div class="meter-text" style="color: #000;">0</div>
    </div>
    </div></td>
    <td><div class="bgl">Load</div> <div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 0%;">
    <div class="meter-text" style="color: #000;">0.00</div>
    </div>
    </div></td>
    <td><div class="bgl">CPU</div> <div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 0%;">
    <div class="meter-text" style="color: #000;">0%</div>
    </div>
    </div></td>
    <td><div class="bgl">Memory</div> <div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 93%;">
    <div class="meter-text" style="color: #000;">93% of 256MB</div>
    </div>
    </div></td>
    <td><div class="bgl">Swap</div> <div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 0%;">
    <div class="meter-text" style="color: #000;">0% of 2793MB</div>
    </div>
    </div></td>
    </tr><tr>
    <td colspan=2><strong>Name:</strong> DNS-325-BackUP</td><td></td>
    <td colspan=2><strong>Model:</strong> DNS-325-Ax</td><td></td>
    </tr><tr>
    <td colspan=3><strong>Date:</strong> Tue Jan 16 14:47:36 MSK 2024</td>
    <td colspan=2><strong>Uptime:</strong> 21 day(s) 18 hour(s)</td><td></td>
    </tr></table></fieldset>
    </div>
    <div id="network_st">
    <fieldset><legend>Network</legend>
    <strong>Speed:</strong>1000Mbps
    <strong>Duplex:</strong>full
    <strong>MTU:</strong>1500
    <strong>TX:</strong>2.6GiB
    <strong>Rx:</strong>484.2MiB
    <strong>IP:</strong>192.168.1.135
    
    </fieldset>
    </div>
    <div id="disks_st">
    <fieldset><legend>Disks</legend>
    <table><tr><th align=left>Bay</th>
    <th>Dev.</th>
    <th>Model</th>
    <th>Capacity</th>
    <th>Power Status</th>
    <th>Temp</th>
    <th>Health</th>
    </tr>
    <tr align=center>
    <td align=left>left</td>
    <td>sda</td>
    <td align=left>WDC WD6003FFBX-68MU3N0</td>
    <td> 6.0TB </td>
    <td id=sda_pstatus_id> active or idle </td>
    <td id=sda_temp_id> 38&deg;C/100&deg;F </td>
    <td id=sda_health_id> <span class=black>passed</span> </td>
    </tr>
    <tr align=center>
    <td align=left>right</td>
    <td>sdb</td>
    <td align=left>WDC WD6003FFBX-68MU3N0</td>
    <td> 6.0TB </td>
    <td id=sdb_pstatus_id> active or idle </td>
    <td id=sdb_temp_id> 37&deg;C/98&deg;F </td>
    <td id=sdb_health_id> <span class=black>passed</span> </td>
    </tr>
    </table></fieldset>
    </div>
    <div id="raid_st">
    <fieldset><legend>RAID</legend>
    <table><tr align=center>
    <th align=left>Dev.</th>
    <th>Capacity</th>
    <th>Level</th><th>State</th>
    <th>Status</th><th>Action</th>
    <th>Done</th><th>ETA</th>
    </tr>
    <tr align=center>
    <td align=left>md0</td>
    <td>5587.7GB</td>
    <td>raid1</td>
    <td>clean</td>
    <td>OK</td>
    <td>idle</td>
    <td align=left></td>
    <td></td>
    </tr>
    </table></fieldset>
    </div>
    <div id="mounted_filesystems_st">
    <fieldset><legend>Mounted Filesystems</legend>
    <table><tr align=center>
    <th>Dev.</th>
    <th>Label</th>
    <th>Capacity</th><th>Available</th>
    <th>FS</th><th>Mode</th>
    <th>Dirty</th><th>Automatic FSCK in</th>
    </tr>
    <tr>
    <td>md0</td>
    <td></td>
    <td align=right>5.4TB</td>
    <td><div class="meter-wrap">
    <div class="meter-value" style="background-color: #6F6; width: 49%;">
    <div class="meter-text" style="color: #000;">2.7TB</div>
    </div>
    </div></td>
    <td>ext4</td>
    <td>RW</td>
    <td><span class="red"></span> </td>
    <td>28 mounts or 84 days</td>
    </tr>
    </table></fieldset>
    </div>
    <div id="mounted_remote_filesystems_st">
    </div>
    <div id="remotely_mounted_filesystems_st">
    <fieldset><legend>Remotely Mounted Filesystems</legend>
    <table><tr align=center>
    <th>Host</th>
    <th>Share</th>
    <th>FS</th>
    </tr>
    <tr><td>fileserver</td><td>Volume_1 </td><td>cifs</td></tr>
    </table></fieldset>
    </div>
    <div id="backup_st">
    </div>
    <div id="filesystem_maintenance_st">
    </div>
    <div id="printers_st">
    </div>
    <form action="">
    Autorefresh <input type=checkbox name="arefresh" value="yes" onclick="frefresh(this)" onmouseover="popUp(event,'st_tt')" onmouseout="popDown('st_tt')">
    </form></body></html>​"
    к примеру для начала я хочу получать данные, то что он имеет объём 5.4TB и занято на текущий момент >2.7TB, но не пойму как сделать предобработку. Пробовал поиск по "составным данным", брал выражения из Google Chrome, типа "/html/body/div[12]/fieldset/table/tbody/tr[2]/td[3]" и "/html/body/div[12]/fieldset/table/tbody/tr[2]/td[4]/div/div/div", также пробовал через js path "document.querySelector("#mounted_filesystems_ st > fieldset > table > tbody > tr:nth-child(2) > td:nth-child(4) > div > div > div")", но нечего не выходит.
    В идеале хочу разобрать этот массив данных на составные части, настроить по ним мониторинг и триггеры.
  • Alex_UUU
    Senior Member
    • Dec 2018
    • 541

    #2
    Вот что-то мне подсказывает, что есть возможность, передав нужные параметры, порлучить от скрипта http://192.168.1.135/cgi-bin/status.cgi вывод в json.
    Например http://192.168.1.135/cgi-bin/status.cgi?jsonoutput
    Который уже разбирается заббиксом без проблем.

    Comment

Working...