Nodejs心跳包(二)監控elasticsearch服務器狀態--學習筆記

知識點:
在Elasticsearch監控集羣健康(cluster health),集羣健康有三種狀態:green、yellow或red。
green表示:所有主要分片和複製分片都可用
yellow表示:所有主要分片可用,但不是所有複製分片都可用
red表示:不是所有的主要分片都可用
從以上的解釋來看只有當status值爲red時服務器會有問題。yellow表示可用,但是複製分片部分有問題。
{ cluster_name: 'elasticsearch',
  status: 'green',
  timed_out: false,
  number_of_nodes: 3,
  number_of_data_nodes: 3,
  active_primary_shards: 30,
  active_shards: 60,
  relocating_shards: 0,
  initializing_shards: 0,
  unassigned_shards: 0,
  delayed_unassigned_shards: 0,
  number_of_pending_tasks: 0,
  number_of_in_flight_fetch: 0,
  task_max_waiting_in_queue_millis: 0,
  active_shards_percent_as_number: 100 }
ESLogsServer.js
主要函數介紹
接收日誌數據:acceptLogData
ES寫日誌:esCreateFiles
監控啓動:timerStart
獲取集羣健康狀態:getClientHealth
function  acceptLogData(){
    app.post('/ES', function(req, res) {
        var content = '';
        req.on('data', function (data) {
            content += data;
        });
        req.on('end', function () {
            var data = JSON.parse(content);
            logs.info(data);
            try {
                if(appConfig.debug){
                    console.log(data);
                }
                esCreateFiles(data);
            }
            catch (error){
                console.log("[error]:"+error.name+error.message);
                hbs.state =false;
                logs.error(error);
                res.end("false");
            }
            res.writeHead(200, {
                "Content-Type": "text/plain;charset=utf-8"
            });
            res.end("true");
        });
    });
}

var esCreateFiles=function(data) {
    client.create(data
        , function (error, response) {
            if (error != undefined) {
                console.log("[異常]" + error);
                logs.error(error);
                logs.info(data);
            }
        });
};

function  timerStart(millisecond) {
   var timerToken = setInterval(function () {
           getClientHealth();
        },
       millisecond
    );
}
function getClientHealth(){
    client.cluster.health(function (err, resp) {
        if (err) {
            hbs.state = false ;
            console.error(err.message);
        } else {
            if(resp.status=='red'){
                hbs.state = false;
            }else{
                hbs.state = true;
            }
            if(appConfig.debug){
                console.dir(resp);
            }
        }
    });
}
var appConfig =require('../AppConfig.js');
var log4js = require('log4js');
log4js.configure(appConfig.log4js);
var logs = log4js.getLogger('normal');
var express = require("express");
var app = express();
var elasticsearch = require('elasticsearch');
var client = elasticsearch.Client(appConfig.elasticSearch);
var heartbeatService =require('./HeartBeatService');
var hbs=heartbeatService.getInstance(app);
function  init(){
    getClientHealth();
    timerStart(1000*5);
    acceptLogData();
    app.listen(8000);
}
init();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章