一、open-falcon介绍

1)中文社区介绍

http://book.open-falcon.org/zh_0_2/intro/

视频连接:http://www.jikexueyuan.com/course/1651_3.html?ss=1

2)falcon的优点

强大灵活的数据采集:自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags)

水平扩展能力:支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询

高效率的告警策略管理:高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用

人性化的告警设置:最大告警次数、告警级别、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期

高效率的graph组件:单机支撑200万metric的上报、归档、存储(周期为1分钟)

高效的历史数据query组件:采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据

dashboard:多维度的数据展示,用户自定义Screen

高可用:整个系统无核心单点,易运维,易部署,可水平扩展

开发语言: 整个系统的后端,全部golang编写,portal和dashboard使用python编写

3)falcon的特性

数据采集方式多样灵活:支持agent、snmp、用户主动push、自定义插件等多种方式进行数据采集

高效率报警策略管理

人性化的告警设置

dashboard多维度数据展示

模板支持继承的同时支持覆盖策略项

server端无需做配置,只需要在client端按照agent则可以自动监控

引入tag概念,通过tag多维度对数据进行查询展示

4) falcon的架构图

Open-Falcon是一个比较大的分布式系统,有十几个组件。按照功能,这十几个组件可以划分为 基础组件、作图链路组件和报警链路组件,其安装部署的架构如下图所示

二、open-falcon单机环境安装

1)安装redis

1.1)yum安装方式

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或 yum install epel-release

yum install redis -y

systemctl start redis

systemctl enable redis

systemctl status redis

1.2)下载 tar包进行安装

#创建redis工作目录

mkdir/home/redis && cd /home/redis

#下载redis程序包:

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

#编译安装

tar-zxvf redis-4.0.9.tar.gz

mv redis-4.0.9 redis4.0.9 && cd redis4.0.9mkdir logs

make&&make install

#修改配置文件

vim redis.conf

bind0.0.0.0daemonize yes

pidfile/var/run/redis_6379.pid

logfile"/home/redis/redis4.0.9/logs/redis.log"#启动redis

redis-server /home/redis/redis4.0.9/redis.conf

#连接测试

redis-cli -h 127.0.0.1 -p 6379

2)安装mysql

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql57-community-release-el7-10.noarch.rpm

yum-y install mysql-community-server

systemctl start mysqld.service

[root@node01~]# grep "password" /var/log/mysqld.log2019-07-13T02:39:54.602191Z 1 [Note] A temporary password is generated for root@localhost: i?5XuEqh+aRL

第一次登陆。必须给密码

mysql-uroot -pi?5XuEqh+aRL

mysql> set global validate_password_policy=0;

Query OK,0 rows affected (0.00sec)

mysql> set global validate_password_length=1;

Query OK,0 rows affected (0.00sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

Query OK,0 rows affected (0.00sec)

systemctl stop mysqld.service

systemctl start mysqld.service

systemctl status mysqld.service

systemctl enable mysqld.service

mysql -uroot -p123456

配套安装: yum install mysql-devel -y

2.1) 卸载mysql源。防止每次yum操作都会自动更新

yum -y remove mysql57-community-release-el7-10.noarch

2.2)不要使用root账号

GRANT ALL ON *.* TO 'falcon'@'localhost' IDENTIFIED BY 'falcon';

GRANT ALL ON*.* TO 'falcon'@'%' IDENTIFIED BY 'falcon';

flush privileges;

2.1) 授权普通用户远程连接

授权远程连接

GRANT ALL PRIVILEGES ON*.* TO 'falcon'@'%' IDENTIFIED BY 'falconpassword'WITH GRANT OPTION;

flush privileges;

查看用户: SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

部分版本授权不能使用 %,代表所有,可考虑使用 * 试一下

3)初始化表结构

git clone https://github.com/open-falcon/falcon-plus.git

#导入表结构

cd ./falcon-plus/scripts/mysql/db_schema/mysql-ufalcon -pfalcon < 1_uic-db-schema.sql

mysql-ufalcon -pfalcon < 2_portal-db-schema.sql

mysql-ufalcon -pfalcon < 3_dashboard-db-schema.sql

mysql-ufalcon -pfalcon < 4_graph-db-schema.sql

mysql-ufalcon -pfalcon < 5_alarms-db-schema.sql

#删除目录

rm-rf falcon-plus/

View Code

4)安装golang

#下载go安装包

https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz

#解压至/home目录下

tar-zxvf go1.12.7.linux-amd64.tar.gz -C /home

#声明PATH

echo"export PATH=$PATH:/home/go/bin" >> /etc/profile

source/etc/profile

#查看go版本

go version

View Code

4.1)创建工作目录

export FALCON_HOME=/home

export WORKSPACE=$FALCON_HOME/open-falcon

mkdir-p $WORKSPACE

5)在工作目录中下载安装包

#下载安装包

wget https://github.com/open-falcon/falcon-plus/releases/download/v0.2.0/open-falcon-v0.2.0.tar.gz

#解压

cd/home/open-falcon

tar-zxvf open-falcon-v0.2.0.tar.gz

View Code

6)后端启动

#修改配置文件为自己设置的mysql用户和密码

grep-Ilr 3306 ./ | xargs -n1 -- sed -i 's/root:/falcon:falcon/g'#启动服务/home/open-falcon/open-falcon start/home/open-falcon/open-falcon check

#显示如下则全部启动成功

falcon-graph UP 27685falcon-hbs UP 27697falcon-judge UP 27707falcon-transfer UP 27716falcon-nodata UP 27724falcon-aggregator UP 27732falcon-agent UP 27743falcon-gateway UP 27753falcon-api UP 27761falcon-alarm UP 28201

View Code

递归替换

grep -Ilr 3306 ./ | xargs -n1 -- sed -i 's/root:/falcon:falconpassword/g'grep-Ilr 3306 ./ | xargs -n1 -- sed -i 's/127.0.0.1/172.20.16.5/g'

三、安装前端展示界面

1)下载展示模板 dashboard

#下载dashboard项目至本地

cd $WORKSPACE

git clone https://github.com/open-falcon/dashboard.git

#安装所需依赖包

yum install-y python-virtualenv

yum install-y python-devel

yum install-y openldap-devel

yum install-y mysql-devel

yum groupinstall"Development tools"

2)创建依赖环境

#创建独立的虚拟环境

cd $WORKSPACE/dashboard/virtualenv ./env

#pip安装依赖

./env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple

3)在依赖环境中创建配置文件

vim rrd/config

# TODO: readfromapi 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","falcon")

PORTAL_DB_PASS= os.environ.get("PORTAL_DB_PASS","falcon")

PORTAL_DB_NAME= os.environ.get("PORTAL_DB_NAME","falcon_portal")

# alarm database

# TODO: readfromapi 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","falcon")

ALARM_DB_PASS= os.environ.get("ALARM_DB_PASS","falcon")

ALARM_DB_NAME= os.environ.get("ALARM_DB_NAME","alarms")

4)启动服务查看状态

#启动

bash control start

bash control status

#查看日志

bash control tail

服务器安装完成

4.1)如果出现内部错误

[root@node01 dashboard]#  cat rrd/config.py   请查看改该文件连接的mysql是否正常加载了用户名和密码

四、客户端的安装

1)从服务端拷贝文件到客户端

[root@node01 open-falcon]# pwd/home/open-falcon

[root@node01 open-falcon]# scp -r agent/ root@192.168.1.7:/home/open-falcon/[root@node01 open-falcon]# scp open-falcon root@192.168.1.7:/home/open-falcon/

2)编辑配置文件

#编辑agent配置文件,修改hostname、transfer、heaetbeat配置项

vim agent/config/cfg.json

#启动agent,查看agent状态

./open-falcon start agent

./open-falcon check agent

tailf agent/logs/agent.log

#重载配置文件

curl127.0.0.1:1988/config/reload

稍等片刻。机器自动发现

五、查询基本使用

1)机器选择,监控指标选择

1.1)查看图像

2) Screen的功能的基本使用

归纳: 先创建demo组,再创建 相关监控的类。最后添加监控指标

再继续添加内存

3)分组功能

添加机器

4)创建模板

添加监控策略

将之前的主机组绑定模板

5)测试肯定会触发的报警值。模板里面进行修改

六、客户端的开机自启动

[root@iotansible0001 init.d]# pwd/etc/rc.d/init.d

[root@iotansible0001 init.d]# cat falcon-agentd

#!/bin/bash

#/etc/init.d/falcon-agentd

# chkconfig:2345 20 80# description: Starts and Stops falcon-agent

dir=/home/envuser/falcon

pid=`ps -ef | grep falcon-agent | grep -v falcon-agentd | grep -v "grep" | awk '{print $2}'`case "$1" instart)if [[ $pid -gt 0]];then

echo $pid

kill-9$pid

echo"Stopping falcon-agent ..."fi

sleep1echo"Starting falcon-agent ..."su- envuser -c "cd $dir && nohup ./open-falcon start agent &";;

stop)if [[ $pid -gt 0]];then

echo $pid

kill-9$pid

echo"Stopping falcon-agent ..."sleep1

elseecho"Falcon-agent is stoped ..."fi

;;

restart)

echo"Resstarting falcon-agent ..."

if [[ $pid -gt 0]];then

echo $pid

kill-9$pid

echo"Stopping falcon-agent ..."fi

sleep1echo"Starting falcon-agent ..."su- envuser -c "cd $dir && nohup ./open-falcon start agent &";;*)

echo"Usage: falcon-agentd {start|stop|restart}"exit0esac

exit0

添加至启动项

chmod +x falcon-agentd

chkconfig--add falcon-agentd

chkconfig falcon-agentd on

七、客户端命令验证

[envuser@nginx-mqtt0001 bin]$ ./falcon-agent --check

net.if... ok

cpustat ... ok

disk.io ... ok

memory ... ok

ss-s ... ok

ss-tln ... ok

kernel ... ok

df.bytes ... ok

loadavg ... ok

netstat ... ok

ps aux ... ok

du-bs ... ok

八、推送监控数据

curl -X POST -d "[{\"metric\": \"test_by_test\", \"endpoint\": \"test_by_test_ep\", \"timestamp\": `date +%s`,\"step\": 60,\"value\": 1,\"counterType\": \"GAUGE\",\"tags\": \"region=test\"}]" http://127.0.0.1:1988/v1/push &> /dev/null

8.1) 官方脚本

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脚本

#!-*- coding:utf8 -*-

importrequestsimporttimeimportjson

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)

通用python脚本改造

#!-*- coding:utf8 -*-

importrequestsimporttimeimportjson

ts=int(time.time())def get_push_data(endpoint, metric, tags, value, ts=int(time.time()), counterType="GAUGE"):

data= [{"endpoint": endpoint,"metric": metric,"tags": tags,"timestamp": ts,"value": value,"step": 60,"counterType": counterType}]

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

endpoint= "history_stream"metric= "eniot_monitor_history_stream"tags= "region={region},point={point}".format(

region= "region",

point= "point",

)

value= 1res=get_push_data(endpoint, metric, tags, value)print(res.text)if __name__ == '__main__':

pull_falcon()

View Code

九、 es 集群监控

引用配置

[es]

data_host= elk0001:9200,elk0002:9200,elk0003:9200log_host= elk-log0001.eniot.io:9200,elk-log0002.eniot.io:9200,elk-log0003.eniot.io:9200

监控脚本

#coding: utf-8

importtimeimportdatetimeimportjsonimporttracebackfrom monitor_logger importLoggerfrom monitor_falcon importFalconfrom elasticsearch importElasticsearch

log_file= u"eniot_monitor_es_status.log"

classESstatus():def __init__(self,logger =None):

self.logger= logger if logger elseLogger(log_file).get_logger()

self.falcon=Falcon(self.logger)defget_conf(self,cf):try:

data_info=dict()

region= cf.get(u"region", u"region")if notregion:

msg=u"get region by conf error!"self.logger.error(msg)returndata_info.update({u"region": region})

data_host= cf.get(u"es", u"data_host")if notdata_host:

msg=u"get es host data by conf error!"self.logger.error(msg)returndata_info.update({u"data_host": data_host})

log_host= cf.get(u"es", u"log_host")if notdata_host:

msg= u"get es host data by conf error!"self.logger.error(msg)returndata_info.update({u"log_host": log_host})returndata_infoexcept:

self.logger.error(traceback.format_exc())defpush_falcon(self,region, excutetime , status,clusterName):try:

endpoint= "eniot_monitor_es_status"metric= "eniot_monitor_es_status_excutetime"tags= "region={region},clusterName={clusterName}".format(

region=region,

clusterName=clusterName,

)print(tags)

falcon_push_data=self.falcon.get_push_data(endpoint, metric, tags, float(excutetime))

self.falcon.push_data(falcon_push_data)

metric= "eniot_monitor_es_status"falcon_push_data=self.falcon.get_push_data(endpoint, metric, tags, status)

self.falcon.push_data(falcon_push_data)except:

self.logger.error(traceback.format_exc())defmonitor_es_client(self,region,host):try:

esclient=Elasticsearch(host)

start_time=time.clock()

result= esclient.cat.health().split(" ")

result_v= esclient.cat.health(v=True)print(result_v)

clusterName=result[2]if result[3] != "green":

status=0else:

status= 1end_time=time.clock()

excutetime= end_time -start_timeprint("result =" + result[3])print("excutetime =" +str(excutetime))

self.push_falcon(region, excutetime, status,clusterName)except:

self.logger.error(traceback.format_exc())defmain(self):try:

cf=self.falcon.check_conf()

data_info=self.get_conf(cf)if notdata_info:

msg= u"get es info error!"self.logger.warn(msg)returnregion= data_info["region"]

log_host= data_info["log_host"].split(",")

data_host= data_info["data_host"].split(",")

self.monitor_es_client(region,log_host)

self.monitor_es_client(region,data_host)except:

self.logger.error(traceback.format_exc())if __name__ == '__main__':

app=ESstatus()

app.main()

eniot_monitor_es_status.py

openfalcon 组件监控_监控软件之open-falcon相关推荐

  1. ajax异步监控_监控整页(非AJAX),需要通知

    ajax异步监控 最近,在JSF中处理新图表和图表"导出服务"时,我遇到了一个非常普遍的问题. 当您执行长时间运行的任务(操作)时,您希望在开始时显示一个状态"请稍候-- ...

  2. 服务器状态监控php源码,服务器状态监控_监控Linux服务器网站状态的SHELL脚本

    摘要 腾兴网为您分享:监控Linux服务器网站状态的SHELL脚本,蜗牛集市,同花顺,探客宝,手柄助手等软件知识,以及日期倒计时插件,云南省教育资源公共,rui手机桌面,小屁孩桌面便签,合金装备崛起复 ...

  3. springcloud工作笔记106---eureka实现服务监控_监控服务下线_服务注册_服务续约_判断注册中心可用_监控eurekaserver启动

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 在一些业务场景下,需要对服务的上下线进行监控,比如上下线都需要进行邮件通知,可以通过eureka提 ...

  4. java 内存 监控_监控JVM内存使用情况

    1.使用jstat命令查看堆内存的使用情况 jstat 命令选项 vmid 间隔时间 查询次数 1.查看当前进程Class类加载的统计 jstat -class ***** 2.查看编译统计 jsta ...

  5. mysql 主从复制 监控_监控MySQL主从复制状态的脚本

    思路是通过show slave status这条命令来查看主从复制的状态,然后根据状态字段的值进行判断. show slave status\G; #显示slave状态; slave_IO_Runni ...

  6. mysql表损坏监控_监控mysql启动情况并检测表错误修复

    给开发部同事用的测试服务器上MYSQL经常挂掉...都懒得理了..写了个脚本自己检测错误修复表继续运行..邮件报警功能等有空再补上去... #!/bin/env bash PATH=/bin:/sbi ...

  7. Mycat监控_监控平台Mycat-web配置指标_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0038

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再去看这个mycat-web怎么用 点击配置,这里配置我们zookeeper的ip和端口 ...

  8. Mycat监控_监控平台安装Mycat-web_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0037

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 下面咱们去安装mycat-web 先把mycat-web上传到opt下 然后解压

  9. Mycat监控_监控平台安装zookeeper_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0036

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 好咱们去安装zookeeper,这个很简单 首先看看这个zookeeper的官网,然后 这里点击d ...

最新文章

  1. 微服务治理平台的RPC方案实现
  2. window下安装Oracle11G安装
  3. matlab分布式平台
  4. php页面自动生成,用户通过PHP填写表单后如何自动生成页面?
  5. 计算机视觉中常见图像扰动方法的Pytorch实现
  6. arch linux 时间,System time (简体中文)
  7. 网工必考的8个dos命令
  8. 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
  9. 智能运维 | 几十万台服务器,保证一条命令执行到位有多难?
  10. Centos8Web服务器搭建
  11. 第三方支付机构是什么意思_什么是支付牌照 在哪查
  12. VBA学习之一:基本知识
  13. .net编程的十大技巧 转载之Jeffery.Sun
  14. Luogu P4484 [BJWC2018]最长上升子序列
  15. 榆熙科技电商:拼多多买家交易评价内容都包含哪些?
  16. 玩知乎五年,我赚了多少钱?
  17. vue3 provide inject用法
  18. java移动小球_使用java实现持续移动的小球
  19. Cesium--倾斜摄影加载详细攻略
  20. 【转】电子毕业设计题目

热门文章

  1. Linux惊群效应之Nginx解决方案
  2. python解析xml存入字典_Python将XML同级放入字典
  3. 物联网毕业设计 单片机指纹识别系统实现
  4. 【引用】网易博客日志标签功能优化…
  5. [矩阵论] Unit 3. 矩阵的分解 - 知识点整理
  6. 【计算机系统】程序人生-Hello’s P2P
  7. 有哪些免费扫图识别文字的方法?方法要选对
  8. 国内浏览器厂商如何抢夺IE的市场份额
  9. 2016年第三季度总结
  10. drools6.3+spring+Drools Workbench+activemq搭建风险控制系统