监控软件之open-falcon
一、open-falcon介绍
1)中文社区介绍
http://book.open-falcon.org/zh_0_2/intro/
参照文档: https://www.cnblogs.com/LAlexH/p/11161943.html
参照文档:https://www.cnblogs.com/straycats/p/7199209.html
视频连接:http://www.jikexueyuan.com/course/1651_3.html?ss=1
告警设置:https://www.cnblogs.com/python-lbl/p/10450186.html
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..tar.gz
mv redis-4.0. redis4.0.9 && cd redis4.0.9
mkdir logs
make && make install
#修改配置文件
vim redis.conf
bind 0.0.0.0
daemonize 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
2)安装mysql
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-.noarch.rpm
yum -y install mysql-community-server
systemctl start mysqld.service
[root@node01 ~]# grep "password" /var/log/mysqld.log
--13T02::.602191Z [Note] A temporary password is generated for root@localhost: i?5XuEqh+aRL
第一次登陆。必须给密码
mysql -uroot -pi?5XuEqh+aRL mysql> set global validate_password_policy=;
Query OK, rows affected (0.00 sec) mysql> set global validate_password_length=;
Query OK, rows affected (0.00 sec) mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
Query OK, rows affected (0.00 sec) systemctl stop mysqld.service
systemctl start mysqld.service
systemctl status mysqld.service
systemctl enable mysqld.service
mysql -uroot -p123456
2.1) 卸载mysql源。防止每次yum操作都会自动更新
yum -y remove mysql57-community-release-el7-.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/
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
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
6)后端启动
#修改配置文件为自己设置的mysql用户和密码
grep -Ilr ./ | xargs -n1 -- sed -i 's/root:/falcon:falcon/g'
#启动服务
/home/open-falcon/open-falcon start
/home/open-falcon/open-falcon check
#显示如下则全部启动成功
falcon-graph UP
falcon-hbs UP
falcon-judge UP
falcon-transfer UP
falcon-nodata UP
falcon-aggregator UP
falcon-agent UP
falcon-gateway UP
falcon-api UP
falcon-alarm UP
递归替换
grep -Ilr ./ | xargs -n1 -- sed -i 's/root:/falcon:falconpassword/g'
grep -Ilr ./ | 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: 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",))
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: 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",))
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
#重载配置文件
curl 127.0.0.1:/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:
# 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" in
start)
if [[ $pid -gt ]];then
echo $pid
kill - $pid
echo "Stopping falcon-agent ..."
fi
sleep
echo "Starting falcon-agent ..."
su - envuser -c "cd $dir && nohup ./open-falcon start agent &"
;;
stop)
if [[ $pid -gt ]];then
echo $pid
kill - $pid
echo "Stopping falcon-agent ..."
sleep
else
echo "Falcon-agent is stoped ..."
fi
;;
restart)
echo "Resstarting falcon-agent ..."
if [[ $pid -gt ]];then
echo $pid
kill - $pid
echo "Stopping falcon-agent ..."
fi
sleep
echo "Starting falcon-agent ..."
su - envuser -c "cd $dir && nohup ./open-falcon start agent &"
;;
*)
echo "Usage: falcon-agentd {start|stop|restart}"
exit
esac
exit
添加至启动项
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
九、 es 集群监控
引用配置
[es]
data_host = elk0001:9200,elk0002:9200,elk0003:9200
log_host = elk-log0001.eniot.io:9200,elk-log0002.eniot.io:9200,elk-log0003.eniot.io:9200
监控脚本
# coding: utf-8
import time
import datetime
import json
import traceback from monitor_logger import Logger
from monitor_falcon import Falcon from elasticsearch import Elasticsearch log_file = u"eniot_monitor_es_status.log" class ESstatus():
def __init__(self,logger = None):
self.logger = logger if logger else Logger(log_file).get_logger()
self.falcon = Falcon(self.logger) def get_conf(self,cf):
try:
data_info = dict()
region = cf.get(u"region", u"region")
if not region:
msg =u"get region by conf error!"
self.logger.error(msg)
return
data_info.update({u"region": region}) data_host = cf.get(u"es", u"data_host")
if not data_host:
msg =u"get es host data by conf error!"
self.logger.error(msg)
return
data_info.update({u"data_host": data_host}) log_host = cf.get(u"es", u"log_host")
if not data_host:
msg = u"get es host data by conf error!"
self.logger.error(msg)
return
data_info.update({u"log_host": log_host}) return data_info
except:
self.logger.error(traceback.format_exc()) def push_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()) def monitor_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 = 0
else:
status = 1 end_time = time.clock()
excutetime = end_time - start_time
print("result = " + result[3])
print("excutetime = " + str(excutetime)) self.push_falcon(region, excutetime, status,clusterName)
except:
self.logger.error(traceback.format_exc()) def main(self):
try:
cf =self.falcon.check_conf()
data_info = self.get_conf(cf)
if not data_info:
msg = u"get es info error!"
self.logger.warn(msg)
return
region = 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
监控软件之open-falcon的更多相关文章
- 现在的SQLSERVER数据库监控软件有哪些?
现在的SQLSERVER数据库监控软件有哪些? 收集了一下当前SQLSERVER数据库监控软件,发现开源免费的真的是“没有” Questsoftware Quest's spotlight(收费) ...
- Android手机监控软件设计实现
一.需求分析: 随着IT信息技术的飞速发展,手机的普及,伴随着智能手机的出现及快速的更新换代,手机已不仅仅是一个通信工具,更是一个多功能的应用平台. 手机监控软件则是基于电脑监控软件的原理,植入手机平 ...
- 普及windows流氓程序和监控软件
win7下载更改后无黑屏windows7激活程序v1.0 一个立即安装 美女主播节目,和流行的色情垃圾邮件 安装程序,结果装了很多垃圾节目,输入.日历.文件等. 重新启动机器后,,会弹出广告. .他的 ...
- CEPH监控软件
概述 目前主流的Ceph开源监控软件有:Calamari.VSM.Inkscope.Ceph-Dash.Zabbix等,下面简单介绍下各个开源组件. Calamari 概述 Calamari对外提供了 ...
- 删除新版UniAccess Agent 办公室监控软件的方法
UniAccess Agent 是在由LeagSoft开发的监控软件,老版本的一般安装在C:\Program Files\LeagSoft\UniAccess Agent这个目录下,一般找到这个目录点 ...
- Greenplum-cc-web监控软件安装
一环境列表 操作系统 centos6.5 64 Greenplum版本: greenplum-db-4.3.5.3-build-2-RHEL5-x86_64.tar Greenplum集群环境搭建: ...
- 开源监控软件ganglia
开源监控软件ganglia安装手册 Ganglia是一个监控服务器,集群的开源软件,能够用曲线图表现最近一个小时,最近一天,最近一周,最近一月,最近一年的服务器或者集群的cpu负载,内存,网络,硬盘等 ...
- Ubuntu 16.04安装基于nethogs衍生的网络监控软件(应用实时网速监控)
基于nethogs衍生的网络监控软件有如下所列举的: nettop显示数据包类型,按数据包的大小或数量排序. ettercap是以太网的网络嗅探器/拦截器/记录器 darkstat通过主机,协议等方式 ...
- Ubuntu 16.04安装ntopng流量监控软件
ntop官方在2012年就已经不再更新,取代的是ntopng.ntopng具有Web页面,适合做网络管理监控软件.比如监控局域网内多台机器的上网情况等. 不过这个东西感觉不太准,最好的方案应该把安装n ...
- 常用开源<监控软件>介绍
转载地址:http://blog.csdn.net/lx_9986/article/details/6803243 一.Zenoss Core Zenoss Core是开源企业级IT管理软件-是智能监 ...
随机推荐
- 07http基础
1.http协议 1.1 概念 是对浏览器和服务器端数据传输格式的规范! 1.2 http协议内容 请求 GET /bbs/hello HTTP/1.1 # 请求行 Host: localhost:8 ...
- Oracle 索引数据字典、基于函数的索引
user_indexes 字典视图包含了索引名和唯一性, user_ind_columns视图包含了索引名.表名.以及列名 dba_indexes dba_ind_columns 同理 select ...
- CSS3 Animations
CSS Animations 是CSS的一个模块,它定义了如何用关键帧来随时间推移对CSS属性的值进行动画处理.关键帧动画的行为可以通过指定它们的持续时间,它们的重复次数以及它们如何重复来控制. an ...
- 函数柯里化(Currying)小实践
什么是函数柯里化 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Ch ...
- 爬虫技术:数据处理josn和pickle模块
一:json模块 json模块的作用就是讲json字符串("{"a":1,"b":1}")和python能够识别的字典进行相互转换. imp ...
- 【leetcode】41. First Missing Positive
题目如下: 解题思路:这题看起来和[leetcode]448. Find All Numbers Disappeared in an Array很相似,但是有几点不同:一是本题的输入存在负数,二是没有 ...
- FPGA设计中遇到的奇葩问题之“芯片也要看出身”
FPGA设计中遇到的奇葩问题之“芯片也要看出身”(一) 昨夜西风凋碧树.独上高楼,望尽天涯路 2000年的时候,做设计基本都是使用Xilinx公司的Virtex和Virtex-E系列芯片.那时候Alt ...
- linux-Centos 7下bond与vlan技术的结合[推荐]
https://blog.51cto.com/sf1314/2073519 服务器eth0与eth1作bonding,捆绑成bond0接口,服务器对端交换机端口,同属于100.101号vlan接口 v ...
- Solr JAVA客户端SolrJ的使用
一.Solrj简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底 ...
- java文件转码
完整项目带lib 参考 http://toyota2006.iteye.com/blog/540316 判断编码 package change; import info.monitorenter.cp ...