文章目录
Agent
作用:
负责收集数据,默认每隔60秒push给Transfer;
agent需要部署到所有要被监控的机器上,比如公司有1万台机器,那就要部署1万个agent。
特点:
默认收集有200项数据,agent与Transfer建立了长连接,数据发送速度比较快;
可以自定义收集数据,通过agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer;
agent资源消耗很少。
配置文件:
vim agent/config/cfg.json
"hostname":"主机名"
"heartbeat": {
"addr": "127.0.0.1:6030", # 向hbs上报机器存活和agent基本信息和,hbs的地址,端口是hbs的rpc端口.
},
"transfer": {
"addrs": [
"127.0.0.1:8433" # 向transfer传输数据,transfer的地址,端口是transfer的rpc端口, 可以支持写多个transfer的地址,agent会保证HA
],
},
监听端口:
1988:# 本地监听端口,用于/v1/push接口接收数据
数据流向组件:heartbeat、transfer
例子说明:
利用/v1/push接口推送数据到transfer
一个shell脚本编写的,自定义push数据到open-falcon的例子
# 注意,http request body是个json,这个json是个列表
ts=`date +%s`;
curl -X POST -d "[{\"metric\": \"test-metric\", \"endpoint\": \"test-endpoint\", \"timestamp\": $ts,\"step\": 60,\"value\": 1,\"counterType\": \"GAUGE\",\"tags\": \"idc=lg,project=xx\"}]" http://127.0.0.1:1988/v1/push
一个python的、自定义push数据到open-falcon的例子
#!-*- coding:utf8 -*-
import requests
import time
import json
ts = int(time.time())
payload = [
{
"endpoint": "test-endpoint",
"metric": "test-metric",
"timestamp": ts,
"step": 60,
"value": 1,
"counterType": "GAUGE",
"tags": "idc=lg,loc=beijing",
},
{
"endpoint": "test-endpoint",
"metric": "test-metric2",
"timestamp": ts,
"step": 60,
"value": 2,
"counterType": "GAUGE",
"tags": "idc=lg,loc=beijing",
},
]
r = requests.post("http://127.0.0.1:1988/v1/push", data=json.dumps(payload))
print r.text
Transfer
作用:
transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph、judge等组件。
特点:
转发效率高,没负载压力
配置文件:
vim transfer/config/cfg.json
"cluster": {
"judge-00" : "127.0.0.1:6080" # 向judge传输数据,judge组件监听的ip
}
"cluster": {
"graph-00" : "127.0.0.1:6070" # 向graph传输数据,graph组件监听的ip
}
监听端口:
6060:控制端口,主要用来对transfer发送控制命令、统计命令、debug命令等
8433:jsonrpc方式的数据接收端口,主要接收agent发来的数据(主要用这个)
4444:telnet方式的数据接收端口
数据流向组件:judge、graph
Graph
作用:
graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理api组件的查询请求、返回绘图数据。
特点:
配置文件:
vim graph/config/cfg.json
"db": {
"dsn": "root:123456@tcp(127.0.0.1:3306)/graph?loc=Local&parseTime=true", # 数据入库,数据库用户root,密码123456,主机端口127.0.0.1:3306,数据库名graph
"maxIdle": 4 # 连接池允许的最大连接数,保持默认即可
},
监听端口:
6071:控制端口,主要用来对graph发送控制命令、统计命令、debug命令等
6070:数据接收端口,主要接收transfer、api发来的数据
API
作用:
api组件,提供统一的restAPI操作接口。比如:api组件接收查询请求,
根据一致性哈希算法去相应的graph实例查询不同metric的数据,然后汇总拿到的数据,最后统一返回给用户。
特点:
配置文件:
vim api/config/cfg.json
"db": { //数据库相关的连接配置信息
......
},
"graph-00": "127.0.0.1:6070" # 根据一致性哈希算法去相应的graph实例查询不同metric的数据,graph组件监听的ip
监听端口:
8080:http监听端口,用于/v1/push接口接收数据
Dashboard
作用:
-用户定义的仪表板和屏幕。
-配置managent的报警,主机组,模板。
-提醒历史管理和显示。
—团队管理。
-组合多种报警。
-用户管理,例如登入、登出、登记、ldap_login等。
特点:
dashbord没有默认创建任何账号包括管理账号,需要你通过页面进行注册账号。
想拥有管理全局的超级管理员账号,需要手动注册用户名为root的账号(第一个帐号名称为root的用户会被自动设置为超级管理员)。
配置文件:
# Falcon+ API
API_ADDR = os.environ.get("API_ADDR","http://127.0.0.1:8080/api/v1") # 向api接口传输数据,api组件监听的ip
# portal database
# TODO: read from api instead of db
PORTAL_DB_HOST = os.environ.get("PORTAL_DB_HOST","127.0.0.1")
PORTAL_DB_PORT = int(os.environ.get("PORTAL_DB_PORT",3306))
PORTAL_DB_USER = os.environ.get("PORTAL_DB_USER","root")
PORTAL_DB_PASS = os.environ.get("PORTAL_DB_PASS","123456")
PORTAL_DB_NAME = os.environ.get("PORTAL_DB_NAME","falcon_portal") # falcon_portal用户登录等数据库 策略入库,查看agent主机信息
# alarm database
# TODO: read from api instead of db
ALARM_DB_HOST = os.environ.get("ALARM_DB_HOST","127.0.0.1")
ALARM_DB_PORT = int(os.environ.get("ALARM_DB_PORT",3306))
ALARM_DB_USER = os.environ.get("ALARM_DB_USER","root")
ALARM_DB_PASS = os.environ.get("ALARM_DB_PASS","123456")
ALARM_DB_NAME = os.environ.get("ALARM_DB_NAME","alarms") # alarms告警数据库
监听端口:
8081:登录web管理页面端口
HBS
作用:
HBS(Heartbeat Server)心跳服务器,公司所有agent都会连到HBS,每分钟发一次心跳请求。
向agent下发插件、特殊采集项,ip白名单,jude下发策略,
特点:
hbs是可以水平扩展的,至少部署两个实例以保证可用性。
一般一个实例可以搞定5000台机器,所以说,如果公司有10万台机器,可以部署20个hbs实例,前面架设lvs,agent中就配置上lvs vip即可。
配置文件:
cat hbs/config/cfg.json
"database": "root:123456@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true", # 读取数据库,数据库用户root,密码123456,主机端口127.0.0.1:3306,数据库名falcon_portal
监听端口:
6030 数据接收端口,主要接收agent发来的信息数据
6031 dashboard策略加载,主要提供admin管理功能,查看内存中缓存的数据
Judge
作用:
Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。
Judge判断告警的功能不能放在直接的数据接收端:Transfer,而应该放到Transfer后面的组件里。
特点:
一个Judge实例处理50万~100万数据,用个5G~10G内存,一个物理机上部署多个Judge实例,通过http接口可以查看当前处理的数据量
配置文件:
cat hbs/config/cfg.json
"remain": 11, # 告警次数最大10次,all(#3),这个#后面的数字不能超过remain-1
"servers": ["127.0.0.1:6030"], # hbs最好放到lvs vip后面,所以此处最好配置为vip:port
"minInterval": 300, # 连续两个报警之间至少相隔的秒数,维持默认即可
"dsn": "127.0.0.1:6379", # 与alarm、sender使用一个redis
监听端口:
6080 数据接收端口,主要接收transfer发来的信息数据
6081 监听了http端口,提供了一个http接口:/count,访问之,可以得悉当前Judge实例处理了多少数据量
Alarm
作用:
alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理,并进行不同渠道的发送。
特点:
在配置报警策略的时候配置了报警级别,比如P0/P1/P2等等,每个及别的报警都会对应不同的redis队列,
alarm去读取这个数据的时候我们希望先读取P0的数据,再读取P1的数据,已经发送的告警信息,alarm会写入MySQL中保存,
在dashboard中查阅历史报警,历史报警保存的周期,是可配置的,默认为7天。
报警合并功能,多条告警同一时刻产生,dashboard模块将告警信息合并且生成url链接,alarm将url链接发给用户。
配置文件:
vim alarm/config/cfg.json
"addr": "127.0.0.1:6379", # judge 存储告警信息在redis的机器ip
"addr": "root:@tcp(127.0.0.1:3306)/alarms?charset=utf8&loc=Asia%2FChongqing", # 告警历史入库
"event_retention_days": 7, # 报警历史信息的保留天数
监听端口:
9912: 查看未恢复的告警通过alarm的http 9912端口页面
Nodata
作用:
nodata用于产生的模拟数据,防止agent宕机无数上报出现无告警。
用户配置相应的报警策略,收到模拟返回值就产生报警。
特点:
配置文件:
"addr": "http://127.0.0.1:8080", # 查看数据 api模块的运行地址
"dsn": "root:@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true&wait_timeout=604800", # 同步策略
"transferAddr": "127.0.0.1:6060", #transfer的http监听地址,push数据回给transfer,产生的模拟数据相当从agent上传过来的
监听端口:
6090 dashboard策略加载,主要提供admin管理功能
组件的所有http端口都可以通过curl -s "ip:端口/health"查看该服务是否正常