Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控

记录了学习过程,官方文档地址http://book.open-falcon.org/zh_0_2/usage/getting-started.html

另外还看了Open-falcon作者的写的设计理念的文,见open-falcon编写的整个脑洞历程

1 自定义数据采集

自定义的数据要求是json格式,至少包括以下七项:

  1. metric: 最核心的字段,代表这个采集项具体度量的是什么, 比如是cpu_idle呢,还是memory_free, 还是qps
  2. endpoint: 标明Metric的主体(属主),比如metric是cpu_idle,那么Endpoint就表示这是哪台机器的cpu_idle
  3. timestamp: 表示汇报该数据时的unix时间戳,注意是整数,代表的是秒
  4. value: 代表该metric在当前时间点的值,float64
  5. step: 表示该数据采集项的汇报周期,这对于后续的配置监控策略很重要,必须明确指定。
  6. counterType: 只能是COUNTER或者GAUGE二选一,前者表示该数据采集项为计时器类型(指标在存储和展现的时候,会被计算为speed,即(当前值 - 上次值)/ 时间间隔),后者表示其为原值 (即用户上传什么样的值,就原封不动的存储)
  7. tags: 一组逗号分割的键值对, 对metric进一步描述和细化, 可以是空字符串. 比如idc=lg,比如service=xbox等,多个tag之间用逗号分隔

然后数据通过POST方法发送到本机agent1988端口的v1/push即可

1.1 Shell命令行传输

这里通过curl命令,命令格式如下

curl -X [请求类型] -d [要传输的内容] [要发送到的URL]

写了一个脚本自定义了这样的一个监控项time-is-odd,抓取当前的时间戳,如果是奇数就返回1,否则返回0,返回的json大概长这样

{
    "endpoint": "open-falcon-server-user-define", 
    "metric": "minute-is-even", 
    "timestamp": 1537841191, 
    "step": 60, 
    "value": 1, 
    "counterType": "GAUGE", 
    "tags": "usage=stupid"
}

脚本如下,初学shell,写的很丑陋

#!/bin/bash

ts=`date +%s`
minute=`date +%M`
is_odd=$(($minute%2))
url="http://127.0.0.1:1988/v1/push"

data="[{ \
        \"endpoint\": \"open-falcon-server-user-define\", \
        \"metric\": \"minute-is-odd\", \
        \"timestamp\": "$ts", \
        \"step\": 60, \
        \"value\": "$is_odd", \
        \"counterType\": \"GAUGE\", \
        \"tags\": \"usage=stupid\" \
      }]" 
curl -X POST -d "$data" $url

用crontab把这个脚本设置为每分钟执行一次

crontab -e  #进入编辑器模式
#写入每分钟执行一次脚本的命令
#*/1 * * * * [刚才写的脚本目录,最好是绝对目录]
#例如 */1 * * * * /home/tuan/send_test.sh

 去Open-falcon的Dashboard看一眼,可以看见新出现的虚拟主机open-falcon-server-user-define和Counter

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第1张图片

数据图像如下

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第2张图片

1.2 Python传输

现在我们push一个新的Counter,当前分钟数为偶数时为1,否则为0,通过Python脚本

#!/usr/bin/python

import requests
import time
import json

ts = int(time.time())
minute = int(time.strftime("%M", time.localtime()))
minute_is_even = (minute + 1) % 2

payload = [
    {
        "endpoint": "open-falcon-server-user-define",
        "metric": "minute-is-even",
        "timestamp": ts,
        "step": 60,
        "value": minute_is_even,
        "counterType": "GAUGE",
        "tags": "usage=stupid",
    },
]

r = requests.post("http://127.0.0.1:1988/v1/push", data=json.dumps(payload))

同样用crontab -e,添加为每分钟自动运行,看一下Open-falcon的Dashboard,把两个定义的项画在一张图上,嗯效果很不错

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第3张图片

2 历史数据查询

通过API可以查询历史数据,官方文档如下

http://api.open-falcon.com/#/graph_histroy

官方api写的不清不楚,摸索了很久,主要是请求头要设置好用于验证身份的信息

首先我们需要获取一个sig,这个sig大概就是判断session是否有效的一个标志,网上一般都说是去数据库uic的session表里面查找每个用户对应的sig。只要在Web端登陆后,没有做登出动作这个sig就不会过期,可以一直使用

但是我觉得这个方法不够优雅,所以研究了一下怎么调用login的api接口,login之后,会返回sig给你使用,这样就避免了谁都要来看一眼数据库才能用api

所有的api默认都是在8080端口,如果你不确定你可以看一眼api的日志,刚启动的时候会显示端口信息

2.1 通过api登陆

这一步就是为了获取sig,图省事你直接去uic这个库里的session表看一眼对应用户名的sig即可

/api/v1/user/login是登陆的地址,登陆很简单,发送一个json过去即可,为了优雅我们把这个json写在一个文件里

#login.json
{
  "name": "root",
  "password": "root密码"
}

然后用curl命令,通过POST的方法发送到对应的地址,一定要在请求头加入信息表示发送的是json,不然一直提示{"error":"name or password is blank"}的错误,详见我这篇博文Open-falcon通过api登陆,返回{"error":"name or password is blank"}的错误

sig值记下来

curl -H 'Content-Type:application/json' [email protected] http://127.0.0.1:8080/api/v1/user/login  #发送post请求

#返回值
{"sig":"************************","name":"root","admin":true}

2.2 查询历史信息

现在要在请求头中加入Apitoken这一项,这一项的值是{"name":"root","sig":"************************"},命令如下。返回结果很长所以我保存到res.json这个文件里了

curl -H 'Content-Type:application/json' -H 'Apitoken:{"name":"root", "sig":"*******************************"}' [email protected] http://127.0.0.1:8080/api/v1/graph/history > res.json

history.json长这样,时间戳可以在网上找在线工具转换

{
  "step": 60,
  "start_time": 1537840800,
  "hostnames": [
    "open-falcon-server"
  ],
  "end_time": 1537854845,
  "counters": [
    "cpu.idle",
    "cpu.iowait"
  ],
  "consol_fun": "AVERAGE"
}

json可以通过jq这个工具整理一下格式,没有的可以yum安装一下,然后通过jq打开res.json,注意jq后面有个空格加点,这个点表示所有的key都解析

cat res.json | jq . > res1.json
less res1.json  #打开解析后的文件

文件最终长这样,每个时间戳的数据,以及Counter的基本信息

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第4张图片

3 进程监控

端口监控之前的学习记录已经有了Centos6.10下Open-falcon学习记录(零)——主机监控、Nodata组件、集群监控

这里我写了一个java程序,进程沉睡五分钟后结束运行

//Main.java
public class Main {
    public static void main(String[] args) {
        try {
            Thread.sleep(5 * 60000);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}   
javac Main.java  #编译
java Main &  #运行

有两种方法可以监控这个进程,一个通过进程name,一个通过启动进程的命令

3.1 进程name

用&启动的命令,会返回给你一个PID,记住这个PID,看/proc/{PID}/status这个文件,我的文件如下,name就是java

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第5张图片

去Open-falcon配置一个报警,监视这个进程

 Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第6张图片

绑定模板

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第7张图片

 

3.2 cmdline

类似地,这回文件在/proc/{PID}/cmdline,会把你启动进程的命令行保存下来,不过是去掉了空格等

配置报警,直接配在3.1一样的模板里,省得绑定了

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第8张图片

 

3.3 报警测试

等一会,就能看见两个Counter

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第9张图片

抽出来看一眼图,可以看到进程存在了约5分钟然后消失(忽略第一个起伏,那是测试)

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第10张图片

 告警列表

Centos6.10下Open-falcon学习记录(一)——自定义数据采集、历史查询、进程监控_第11张图片

你可能感兴趣的:(Open-falcon学习)