小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

監(jiān)控Netstat數(shù)據(jù)

 看見就非常 2015-04-19

我的日常工作有很大一部分比重是處理各種網(wǎng)絡(luò)問題。很多時候,面對突發(fā)故障,完全搞不清楚緣由,此時,一個完善的監(jiān)控系統(tǒng)能起到事半功倍的效果。

一個好消息是「netstat -s」里的各種計數(shù)器包含了很多有用的信息;一個壞消息是計數(shù)器記錄的通常都是一些碩大無比的絕對值,不夠直觀。以前,我寫過一篇的文章來介紹如何監(jiān)控相關(guān)數(shù)據(jù),但寫得并不完善;最近,瀏覽 文章 時偶然發(fā)現(xiàn)一個 工具 ,可以很方便的實時查詢計數(shù)器相對值的變化情況,可惜不能方便的對接到監(jiān)控系統(tǒng)里。既然現(xiàn)有的輪子都不太合適我的需求,那么我便有了充足的理由去重新造一個。

解決問題前需要摸摸底,如下可見命令「netstat -s」的結(jié)果是一個層次化的結(jié)構(gòu):

netstat -s

我們需要把它轉(zhuǎn)換成更利于使用的規(guī)范化結(jié)構(gòu)。翠花,上代碼:

<?php
function one_dimensional_array($values, $prefix = 'netstat') {
  $result = array();
  foreach ($values as $key => $value) {
    $key = $prefix . '.' . $key;
    if (is_string($value)) {
      $result[$key] = $value;
    } else {
      $result += one_dimensional_array($value, $key);
    }
  }
  return $result;
}
function multi_dimensional_array($values, $indent = 0) {
  $result = array();
  for (reset($values); $v = current($values); next($values)) {
    $space = space($v);
    $last = substr($v, -1);
    if ($space == $indent && $last == ':') {
      $title = title($v);
      continue;
    }
    if ($last == ':') {
      $_values = array($v);
      while ($_value = next($values)) {
        if (space($_value) > $space) {
          $_values[] = $_value;
        } else {
          prev($values);
          break;
        }
      }
      $v = multi_dimensional_array($_values, $space);
    }
    if (is_string($v)) {
      if (preg_match('/\s(\d+)/', $v, $matches)) {
        $v = preg_replace("/{$matches[1]}\s?/", '', $v);
        $result[$title][title($v)] = $matches[1];
      }
    } else {
      $result[$title] += $v;
    }
  }
  return $result;
}
function space($string) {
  return strlen($string) - strlen(ltrim($string));
}
function title($string) {
  return str_replace(' ', '_', rtrim(trim($string), '\.:'));
}
?>

利用遞歸把數(shù)據(jù)先整理成一個層次化數(shù)組,再轉(zhuǎn)換成一個扁平化的數(shù)組,調(diào)用如下:

<?php

exec('netstat -s', $values);

$values = multi_dimensional_array($values);
$values = one_dimensional_array($values);

print_r($values);

?>

最終能生成一百多項網(wǎng)絡(luò)情況相關(guān)數(shù)據(jù),很容易就能對接到 Graphite 等監(jiān)控系統(tǒng):

Graphite

不過需要說明的是,監(jiān)控的是相對值,不是絕對值!你可以通過 cron 每分鐘生成一份當(dāng)前的絕對值快照,然后對比前一分鐘的情況,把相對值發(fā)送到監(jiān)控系統(tǒng)里,例子:

netstat.TcpExt.fast_retransmits

圖例監(jiān)控的是 TcpExt 里的 fast_retransmits 數(shù)據(jù),可以明顯看到在某一時刻,一部分服務(wù)器的 fast_retransmits 變化量明顯超過其它服務(wù)器,猜測對應(yīng)的網(wǎng)絡(luò)可能存在類似丟包等不穩(wěn)定的情況,有了這些監(jiān)控,我們就不用再盲人摸象了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多