夜莺(Nightingale)企业级监控平台

39 篇文章 1 订阅
35 篇文章 0 订阅

元芳算法服务部署-监控篇(内部)

简介

夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。Nightingale在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台服务,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。

在夜莺(Nightingale)的基础上进行了二次开发,支持docker化部署(不推荐),支持GPU指标监控、第三方应用指标监控等。

下载&安装

准备工作

如果非docker化部署,需要安装go(可选)及python3环境,参考附录。

部署安装

  • master节点docker镜像地址:/nightingale-tool.tar
  • collector部署包地址:/nightingale-collector.tar
  • collector(即agent,可以采集机器常见指标,原生支持日志监控,支持插件机制,支持业务通过接口直接上报数据),建议直接部署collector到待监控主机:
## 部署nightingale-tool

tar -xvf nightingale-tool.tar

## 安装mysql和redis

cd ./nightingale-tool

#### 修改mysql用户名、密码及挂载目录

vi config.sh

#### 使用mysql.sh 安装并启动mysql

./mysql.sh {install|start}

#### 使用redis.sh 安装并启动redis

./redis.sh {install|start}

#### 使用nightingale-all.sh 安装并启动tool

./nightingale-all.sh {install|start}



## 单独部署collector

tar -xvf nightingale-collector.tar

cd ./nightingale-collector

#### 修改 etc/address.yml

    修改monapi和transfer的IP和端口(端口默认不需要修改,如果你手动修改了这两个服务的端口,则根据实际情况修改)



#### 设置自启动

cp etc/n9e-collector.service /usr/lib/systemd/system

修改/usr/lib/systemd/system/n9e-collector.service文件ExecStart的值

    

#### 使用collector.sh 启停服务

./collector.sh {start|stop|restart|status}


实际部署【需要修改的配置项】:

nightingale-tool:

    修改数据库、RedisIP的IP地址、mysql挂载目录:/opt/monitor/nightingale-tool/config.sh

    修改addresses的IP地址:/opt/monitor/nightingale-tool/config/address.yml

    去掉参数--gpus all:/opt/monitor/nightingale-tool/nightingale-all.sh、nightingale-collector.sh



nightingale-collector:

    修改IP地址、端口:/opt/monitor/nightingale-collector/etc/address.yml

 

 

☆☆注意如果在某台机器上既部署nightingale-tool和ightingale-collector时,需修改nightingale-collector的collect端口

collector:

  http: 0.0.0.0:2059

 

  如果GPU脚本插件无法运行,请将

  code, endpoint = subprocess.getstatusoutput("timeout 1 /usr/sbin/ifconfig `/usr/sbin/route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1")

  修改为:

  code, endpoint = subprocess.getstatusoutput("timeout 1 /usr/sbin/ifconfig eth0|grep inet|awk '{print $2}'|head -n 1")

使用

使用说明

监控指标

监控指标的数据结构如下:

[

      {

        "metric": "disk.io.util",

        "endpoint": "192.168.0.131",

        "tags": "device=sda",

        "value": 15.4,

        "timestamp": 1554455574,

        "counterType": "GAUGE",

        "step": 20

    }

]

  • metric是监控指标
  • endpoint是监控实体,主机IP
  • tags是监控数据的属性标签
  • step为监控数据的上报周期
  • value是监控指标的当前值
  • timestamp是当前时间戳,单位是秒
  • counterType字段表示指标类型,支持GAUGE和COUNTER,如果不上报这个字段,默认为GAUGE,如果上报的指标是COUNTER类型,需要明确指定。另外,COUNTER类型的指标的计算逻辑是在collector模块实现的,所以不要把COUNTER类型的指标直接推给transfer。

插件机制

可以指定某个目录为插件目录,读取该目录下符合特定格式的文件,当成插件执行,以此扩展collector的能力。对于业务系统的监控指标采集,可以把采集脚本放到业务程序发布包中,随着业务代码上线而上线(上线的时候把脚本放到collector的plugin目录下)。

注意:插件执行需要在页面(采集配置页面)上配置才能运行

  • 支持给插件传参数,传环境变量,传Stdin,非常灵活
  • 分发插件的时候可以无差别分发到所有机器,不同机器执行不同的插件直接在web上即可控制

对于插件,有如下几个要求:

  • 插件脚本必须具有可执行权限,部署完了脚本记得chmod +x一下
  • 插件脚本可以是sh、py、pl、rb,甚至可以是二进制,只要机器上有runtime环境
  • 插件脚本的命名:${step}_xx.xx,比如20_uptime.sh,${step}是在告诉collector多久跑一次
  • plugin目录下非${step}_xx.xx命名格式的文件或者目录可以存在没关系,collector不会识别为插件
  • 插件执行之后要在stdout输出一个json array,collector会截获这个输出,解析为监控指标上报
  • 如果插件执行报错了,报错消息要打印到stderr,不要打印到stdout

插件示例如下:

#!/usr/bin/python3

#-*- coding:utf-8 -*-

import time

import subprocess

import json

import sys

import os

items = []


def collect_myself_status():

    item = {}

    item["metric"] = "plugin.myself.status"

    item["value"] = 1

    item["tags"] = ""

    items.append(item)

def main():

    code, endpoint = subprocess.getstatusoutput(

        "timeout 1 /usr/sbin/ifconfig `/usr/sbin/route|grep '^default'|awk '{print $NF}'`|grep inet|awk '{print $2}'|head -n 1")

    if code != 0:

        sys.stderr.write('cannot get local ip')

        return

    timestamp = int("%d" % time.time())

    plugin_name = os.path.basename(sys.argv[0])

    step = int(plugin_name.split("_", 1)[0])

    collect_myself_status()


    for item in items:

        item["endpoint"] = endpoint

        item["timestamp"] = timestamp

        item["step"] = step


    print(json.dumps(items))



if __name__ == "__main__":

    sys.stdout.flush()

    main()

    sys.stdout.flush()

另外,第三方指标采集器不是以插件机制存在,而是以独立进程或者cron脚本的方式存在,这种方式和插件类似,只是需要自己将采集的监控数据push给collector或者transfer,也算是一种广义的插件。

collector的数据采集API接口默认为:http://127.0.0.1:2058/api/collector/push

界面预览

附录

CentOS安装go环境(可选)

直接从Oss下载: /go1.15.3.linux-amd64.tar.gz



tar -zxvf go1.15.3.linux-amd64.tar.gz



mv go /usr/local

## #配置系统变量

echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile



source /etc/profile

## 查看版本,正常显示则表明安装正常

go version

CentOS安装python3环境

直接从Oss下载:

  • python3安装包:python-devel.tar.gz
  • python3依赖包:Python-3.7.5.tgz
## 安装依赖

tar -zxvf python-devel.tar.gz

cd python-devel

rpm -ivh --nodeps --force ./*



## 安装python3

mkdir /usr/local/python3

tar -zxvf ../Python-3.7.5.tgz -C /usr/local/python3

cd /usr/local/python3/Python-3.7.5

./configure --prefix=/usr/local/python3

## 编译安装

make && make install

【离线环境:如果编译安装出现问题:缺少zlib库时请使用gcc离线安装包.zip,否则跳过该安装包】

## #配置系统变量

echo 'export PATH=$PATH:/usr/local/python3/bin' >> /etc/profile

source /etc/profile

## 查看版本,正常显示则表明安装正常

python3 -V

Python GPUtil组件安装(监控GPU资源)

直接从Oss下载:

  • GPUtil包:GPUtil.tar.gz

## 安装

tar -zxvf GPUtil.tar.gz -C /usr/local/python3/lib/python3.7/site-packages

#设置python3软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

#创建pip3的软连接

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值