记录了学习过程,官方文档地址http://book.open-falcon.org/zh_0_2/usage/getting-started.html
另外还看了Open-falcon作者的写的设计理念的文,见open-falcon编写的整个脑洞历程
自定义的数据要求是json格式,至少包括以下七项:
然后数据通过POST方法发送到本机agent1988端口的v1/push即可
这里通过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
数据图像如下
现在我们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,把两个定义的项画在一张图上,嗯效果很不错
通过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的日志,刚启动的时候会显示端口信息
这一步就是为了获取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}
现在要在请求头中加入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学习记录(零)——主机监控、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,一个通过启动进程的命令
用&启动的命令,会返回给你一个PID,记住这个PID,看/proc/{PID}/status这个文件,我的文件如下,name就是java
去Open-falcon配置一个报警,监视这个进程
绑定模板
类似地,这回文件在/proc/{PID}/cmdline,会把你启动进程的命令行保存下来,不过是去掉了空格等
配置报警,直接配在3.1一样的模板里,省得绑定了
等一会,就能看见两个Counter
抽出来看一眼图,可以看到进程存在了约5分钟然后消失(忽略第一个起伏,那是测试)
告警列表