elasticsearch做服务端监控

2021/05/23 posted in  服务端
Tags:  #php #linux

在kibana里其实很容易查看到具体的使用情况
9490AE60-49A0-4DBE-98A1-ADBA30D

但发觉没报警机制,例如发送短信和钉钉报警(钉钉主要拉机器人,这里不做详细介绍)。


"elasticsearch/elasticsearch": "^7.0"

首先在composer里加载elasticsearch的开源组件

核心代码如下:

 public static function getSearch($type = '', $hostname = 'k8s-slave02')
    {
        $searchtype = '';
        switch($type)
        {
            case 'diskio':
                $searchtype = 'system.diskio';
                break;
            case 'network':
                $searchtype = 'system.network';
                break;
            case 'cpu':
                $searchtype = 'system.cpu';
                break;
            case 'memory':
                $searchtype = 'system.memory';
                break;
            case 'filesystem':
                $searchtype = 'system.filesystem';
                break;
            default:
                $searchtype = '';
                break;
        }
        if(empty($client))
        {
            $hosts = \SilangPHP\Config::get("Db.elasticsearch");
            self::$client = ClientBuilder::create()->setHosts($hosts)->build();
        }
        $params = [
            'index' => 'metricbeat-7.5.1',
            'type' => '_doc',
            'sort' => '@timestamp:desc',
            'size' => 1,
            'body' => [
                'query' => [
                    'bool' => [
                        'must' => [
                            [ 'match' => [ 'host.hostname' => $hostname ] ],
                            // system.diskio | docker.cpu system.network load  system.cpu system.process.summary system.process.summary
                            [ 'match' => [ 'event.dataset' => $searchtype ] ],
                        ]
                    ]
                ]
            ]
        ];
        $results = self::$client->search($params);
        $milliseconds = $results['took'];
        $maxScore     = $results['hits']['max_score'];
        $score = $results['hits']['hits'][0]['_score'];
        $doc   = $results['hits']['hits'][0]['_source'];
        return $doc;
    }

主要通过匹配搜索host.hostname主机名称和event.dataset事件来获取相关信息,为了获取最新的来报警,排序使用@timestamp:desc时间倒序来获取。

汇总发送效果

规则报警得大家自己去定义,例如内存高于80%的时候触发报警。
使用过某些开源的监控工具,其实也没精力去学习更多,也相对复杂,简单有简单的好处。
相比第一版报警系统,现在的其实可观很多_^