Open-falcon技术实践V1.0


1 OPEN-FALCON简述

Open-falcon是一款用golang和python写的监控系统,由小米启动这个项目。
1、监控系统,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器、操作系统、中间件、应用进行全面的监控,及报警,对我们的系统正常运行的作用非常重要。
2、基础监控
CPU、Load、内存、磁盘、IO、网络相关、内核参数、ss 统计输出、端口采集、核心服务的进程存活信息采集、关键业务进程资源消耗、NTP offset采集、DNS解析采集,这些指标,都是open-falcon的agent组件直接支持的。
3、第三方监控
术业有专攻,运行在OS上的应用甚多,Open-Falcon的开发团队不可能把所有的第三方应用的监控全部做完,这个就需要开源社区提供更多的插件,当前对于很多常用的第三方应用都有相关插件了。
4、JVM监控
对于Java作为主要开发语言的大多数公司,对于JVM的监控不可或缺。
每个JVM应用的参数,比如GC、类加载、JVM内存、进程、线程,都可以上报给Falcon,而这些参数的获得,都可以通过MxBeans实现。
5、业务应用监控
对于业务需要监控的接口,比如响应时间等。可以根据业务的需要,上报相关数据到Falcon,并通过Falcon查看结果
官网:https://www.open-falcon.com/

1.1 OPEN-FALCON架构组成介绍

在这里插入图片描述
其中,基础组件以绿色标注圈住、作图链路组件以蓝色圈住、报警链路组件以红色圈住,橙色填充的组件为域名。OpenTSDB功能尚未完成。

1.2 OPEN-FALCON的组件介绍

  • agent

agent用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util等等,每隔60秒push给Transfer。agent与Transfer建立了长连接,数据发送速度比较快,agent提供了一个http接口/v1/push用于接收用户手工push的一些数据,然后通过长连接迅速转发给Transfer。

  • hbs(Heartbeat Server)
    心跳服务器,公司所有agent都会连到HBS,每分钟发一次心跳请求。
    agent会定期从hbs中拉取配置,比如:需要运行plugins的目录;
    judge模块也会定期从hbs去获取告警策略;
  • transfer
    transfer是数据转发服务。它接收agent上报的数据,然后按照哈希规则进行数据分片、并将分片后的数据分别push给graph&judge等组件。
  • judge
    Judge用于告警判断,agent将数据push给Transfer,Transfer不但会转发给Graph组件来绘图,还会转发给Judge用于判断是否触发告警。
    Judge监听了一个http端口,提供了一个http接口:/count,访问之,可以得悉当前Judge实例处理了多少数据量。
  • graph
    graph是存储绘图数据的组件。graph组件 接收transfer组件推送上来的监控数据,同时处理query组件的查询请求、返回绘图数据。
  • gateway
    站在client端的角度,gateway和transfer提供了完全一致的功能和接口。只有遇到网络分区的情况时,才有必要使用gateway组件。
    在这里插入图片描述
  • alarm
    alarm模块是处理报警event的,judge产生的报警event写入redis,alarm从redis读取处理;
  • aggregator
    集群聚合模块。聚合某集群下的所有机器的某个指标的值,提供一种集群视角的监控体验。
  • nodata
    nodata用于检测监控数据的上报异常。nodata和实时报警judge模块协同工作,过程为: 配置了nodata的采集项超时未上报数据,nodata生成一条默认的模拟数据;用户配置相应的报警策略,收到mock数据就产生报警。采集项上报异常检测,作为judge模块的一个必要补充,能够使judge的实时报警功能更加可靠、完善

1.3 OPEN-FALCON的设计理念

1.3.1 数据模型

Open-Falcon,采用和OpenTSDB相似的数据格式:metric、endpoint加多组key value tags

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

1.3.2 plugin

Plugin可以看做是对agent功能的扩充。对于业务系统的监控指标采集,最好不要做成plugin,而是把采集脚本放到业务程序发布包中,随着业务代码上线而上线,随着业务代码升级而升级,这样会比较容易管理。

  1. 先将脚本push到git
  2. curl下agent的接口去获取plugins
  3. 在dashborad的HostGroup中绑定plugins目录,因为不是所有的plugins都需要在该机器上执行,这里通过目录来区分;agent会通过hbs的接口去获取配置;

1.3.3 Tag和HostGroup

tag其实是一种分组方式,当push的数据无法标记tag(比如:我们agent采集的cpu, memory, net等信息),那我们就要将这些数据手工分组了,这就是HostGroup;
HostGroup实际上是对endpoint的一种分组;
想象一下,一条数据push上来,我们应该怎么判断这条数据是否该报警呢?首先我们需要找到这条数据的expression,无非就是看expression中的tag是否是当前push上来数据的子集;当没有tag的数据呢? push上来的数据肯定有endpoint, 我们可以根据endpoint查看是哪个HostGroup, HostGroup又是跟template绑定,template中又会配置告警策略。

1.4 OPEN-FALCON各个实例通信网络端口

端口名称默认端口说明
httpd3000监听的网络端口
netcat44444netcat端口
dashboard8081dashboard前端web端口
api8080后端API端口
push_api1988后端API端口
redis6379redis-server端口

2 OPEN-FALCON安装

2.1 中间件版本选取

中间件名称版本号
CentOSCentOS6.8
Java1.8.0_121
go1.13.11 linux/amd64
redis3.2.5
python2.7.4
pip20.2
open-falcon0.2.1

2.2 环境准备

2.2.1 CentOS 6.8

CentOS6.8 安过程省略。预先创建用户/用户组zhouchen
预先安装jdk1.8.0_121 +
预先安装Mysql
预先安装Redis
预先安装Python
预先安装Pip
创建目录/opt/open-falcon作为open-falcon的home

2.2.2 关闭防火墙-root

[zhouchen@hadoop102 software]$ sudo service iptables stop
[zhouchen@hadoop102 software]$ sudo chkconfig iptables off

2.3 安装GO环境

1.安装golang包

[zhouchen@hadoop102 software]$ sudo yum install golang -y

2.配置全局环境

[zhouchen@hadoop102 software]$ sudo vim /etc/profile.d/hadoop.sh
#添加如下内容
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH

2.4 启动REDIS

1.启动Redis服务端

[zhouchen@hadoop102 redis-3.2.5]$ redis-server redis.conf 

2.启动Redis客户端

[zhouchen@hadoop102 redis-3.2.5]$ redis-cli -h hadoop102 -p 6379
hadoop102:6379>

2.5 安装FALCON-PLUS

1.安装下载源码包falcon-plus-master.zip

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

2.上传到服务器并解压

[zhouchen@hadoop102 software]$ unzip -d falcon-plus-master.zip -d /opt/open-falcon

3.执行falcon-plus中的sql脚本

[zhouchen@hadoop102 open-falcon]$ cd falcon-plus-master/scripts/mysql/db_schema/
[zhouchen@hadoop102 db_schema]$ mysql -h hadoop102 -u root -p < 1_uic-db-schema.sql
[zhouchen@hadoop102 db_schema]$ mysql -h hadoop102 -u root -p < 2_portal-db-schema.sql
[zhouchen@hadoop102 db_schema]$ mysql -h hadoop102 -u root -p < 3_dashboard-db-schema.sql
[zhouchen@hadoop102 db_schema]$ mysql -h hadoop102 -u root -p < 4_graph-db-schema.sql
[zhouchen@hadoop102 db_schema]$ mysql -h hadoop102 -u root -p < 5_alarms-db-schema.sql

2.6 安装OPEN-FALCON二进制包

1.下载二进制包open-falcon-v0.2.1.tar.gz
github下载地址

2.上传到服务器并解压

[zhouchen@hadoop102 software]$ tar -zxvf open-falcon-v0.2.1.tar.gz -C /opt/open-falcon/

3.修改配置文件
需要修改的组件如下:
aggregator   /opt/open-falcon/aggregator/config/cfg.json
graph     /opt/open-falcon/graph/config/cfg.json
hbs      /opt/open-falcon/hbs/config/cfg.json
nodata    /opt/open-falcon/nodata/config/cfg.json
api     /opt/open-falcon/api/config/cfg.json
alarm    /opt/open-falcon/alarm/config/cfg.json
需要修改的内容如下:
1)将所有的127.0.0.1改成hadoop102

[zhouchen@hadoop102 open-falcon]$ grep -Ilr '127.0.0.1' ./ | xargs -n1 -- sed -i 's/127.0.0.1/hadoop102/g'

2)配置mysql数据库和密码将root:改成root:zhou59420

[zhouchen@hadoop102 open-falcon]$ grep -Ilr 3306 ./ | xargs -n1 -- sed -i 's/root:/root:zhou59420/g'

4.启动open-falcon

[zhouchen@hadoop102 open-falcon]$ ./open-falcon start
[falcon-graph] 4697
[falcon-hbs] 4710
[falcon-judge] 4721
[falcon-transfer] 4730
[falcon-nodata] 4738
[falcon-aggregator] 4747
[falcon-agent] 4758
[falcon-gateway] 4766
[falcon-api] 4774
[falcon-alarm] 4789

5.检查组件启动情况

[zhouchen@hadoop102 open-falcon]$ ./open-falcon check
        falcon-graph         UP            4697 
          falcon-hbs         UP            4710 
        falcon-judge         UP            4721 
     falcon-transfer         UP            4730 
       falcon-nodata         UP            4738 
   falcon-aggregator         UP            4747 
        falcon-agent         UP            4758 
      falcon-gateway         UP            4766 
          falcon-api         UP            4774 
        falcon-alarm         UP            4789

2.7 部署前端

1.下载源码包dashboard-master.zip
github源码下载地址

2.上传到服务器并解压

[zhouchen@hadoop104 software]$ unzip dashboard-master.zip -d /opt/open-falcon/

3.安装依赖

[zhouchen@hadoop104 software]$ sudo yum install -y openldap-devel 
[zhouchen@hadoop104 software]$ sudo yum install -y python-devel
[zhouchen@hadoop104 software]$ sudo yum install -y python-virtualenv
[zhouchen@hadoop104 software]$ sudo yum groupinstall "Development tools"
[zhouchen@hadoop104 software]$ sudo yum -y install openssl openssl-devel

4.安装

[zhouchen@hadoop104 software]$ python -m pip install virtualenv
[zhouchen@hadoop104 open-falcon]$ cd dashboard-master/
[zhouchen@hadoop104 dashboard-master]$ pip install -r pip_requirements.txt -i https://pypi.douban.com/simple  

#注意这一步如果报错,可以将pip_requirements.txt中的安装步骤分别执行,检查到底是哪一步安装错误

[zhouchen@hadoop104 dashboard-master]$ pip install Flask==1.0 -i https://pypi.douban.com/simple
  1. 修改dashboard配置文件,分别是PORTAL_DB和ALARM_DB,修改数据库的用户名和密码,保证dashboard能连接数据库
[zhouchen@hadoop104 dashboard-master]$ vim rrd/config.py
# Falcon+ API
API_ADDR = os.environ.get("API_ADDR","http://hadoop102:8080/api/v1")
API_USER = os.environ.get("API_USER","admin")
API_PASS = os.environ.get("API_PASS","password")

# portal database
# TODO: read from api instead of db
PORTAL_DB_HOST = os.environ.get("PORTAL_DB_HOST","hadoop102")
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","zhou59420")
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","hadoop102")
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","zhou59420")
ALARM_DB_NAME = os.environ.get("ALARM_DB_NAME","alarms")

2.8 OPEN-FALCON登录

1.启动bash

[root@hadoop104 dashboard-master]# bash control start

日志的位置:
/opt/open-falcon/dashboard-master/var/app.log

2.浏览器访问http://hadoop104:8081/
在这里插入图片描述
3.注册账户
在这里插入图片描述
1)dashbord没有默认创建任何账号包括管理账号,需要你通过页面进行注册账号
2)第一个帐号名称为root的用户会被自动设置为超级管理员
3)注册账号能够被任何打开dashboard页面的人注册。关闭注册账号功能:修改api组件的配置文件cfg.json,将signup_disable配置项修改为true
在这里插入图片描述

2.9 OPEN-FALCON的一些页面

1.后端页面 hadoop102:1988
在这里插入图片描述
2.api页面hadoop102:8080
在这里插入图片描述

3.前端页面
见2.8

3 OPEN-FALCON基础操作

3.1 监控FLUME

官方参考链接:https://book.open-falcon.org/zh_0_2/usage/flume.html
open-falcon作为一个监控框架,可以去采集任何系统的监控指标数据,只要将监控数据组织为open-falcon规范的格式就OK了。Flume的数据采集可以通过脚本flume-monitor来做。

3.1.1 工作原理

flume-monitor.py是一个采集脚本,只需要放到falcon-agent的plugin目录,在portal中将对应的plugin绑定到主机组,falcon-agent会主动执行flume-monitor.py脚本,flume-monitor.py脚本执行结束后会输出json格式数据,由falcon-agent读取和解析数据。
Flume运行时需要在配置文件中加入java环境变量,启动成功之后flume进程会监听一个端口,可以通过http请求的方式来抓取flume提供的metrics,flume-monitor.py脚本中配置了需要抓取的Flume组件metric,通过http的方式从flume端口中抓取需要的组件信息,输出json格式数据。

3.1.2 修改Flume配置项

1.修改$FLUME_HOME/conf/flume-env.sh

[zhouchen@hadoop102 flume]$ vim conf/flume-env.sh
# 添加语句,http的端口指定为3000
export JAVA_OPTS="$JAVA_OPTS -Dflume.monitoring.type=http -Dflume.monitoring.port=3000"

2.启动flume

[zhouchen@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/flume-netcat-logger.conf -Dflume.root.logger=INFO,console -Dflume.monitoring.type=http -Dflume.monitoring.port=3000

3.1.3 open-falcon配置项

1.进入open-falcon工作目录,修改agent/config/cfg.json

[zhouchen@hadoop102 open-falcon]$ mkdir plugin
[zhouchen@hadoop102 open-falcon]$ vim agent/config/cfg.json
#修改内容如下
"plugin": {
        "enabled": true,
        "dir": "./plugin",
        "git": "https://github.com/mdh67899/openfalcon-monitor-scripts.git",
        "logs": "./logs"
    }

./plugin指的是open-falcon工作目录下的plugin目录

2.下载https://github.com/mdh67899/openfalcon-monitor-scripts.git

3.上传openfalcon-monitor-scripts.git到服务器并解压

4.将openfalcon-monitor-scripts.git中的flume移动到open-falcon工作目录下的plugin

[zhouchen@hadoop102 openfalcon-monitor-scripts-master]$ mv flume/ ../plugin/

5.为flume脚本添加权限

[zhouchen@hadoop102 open-falcon]$ chmod 755 plugin/flume/60_flume-monitor.py

6.修改60_flume-monitor.py脚本

[zhouchen@hadoop102 open-falcon]$ vim plugin/flume/60_flume-monitor.py
#修改内容如下
    url="http://hadoop102:3000/metrics"
    r = requests.post("http://hadoop102:1988/v1/push", data=json.dumps(payload))

3.1.4 Dashboard配置

1.创建HostGroup
在这里插入图片描述
2.绑定host
在这里插入图片描述
3.绑定plugin
在这里插入图片描述在这里插入图片描述

3.1.5 查看dashboard是否存在flume相关counters

1.重启open-falcon agent

[zhouchen@hadoop102 open-falcon]$ ./open-falcon restart agent

2.查看dashboard
在这里插入图片描述在这里插入图片描述

3.agent中flume相关日志

[zhouchen@hadoop102 open-falcon]$ vim agent/logs/agent.log
2020/08/03 16:14:47 plugin.go:64: <Plugins:[flume], Timestamp:1596442487>

4.相关日志

/opt/open-falcon/logs/flume/60_flume-monitor.py.stderr.log

4 OPEN-FALCON常见问题分析

4.1 安装PIP_REQUIREMENTS失败

报错

[zhouchen@hadoop102 dashboard-master]$ env/bin/pip install -r pip_requirements.txt -i https://pypi.douban.com/simple
Looking in indexes: https://pypi.douban.com/simple
    ERROR: Command errored out with exit status 1:
     command: /opt/open-falcon/dashboard-master/env/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-g1k2j1gd/mysql-python/setup.py'"'"'; __file__='"'"'/tmp/pip-install-g1k2j1gd/mysql-python/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-opjj8aav
         cwd: /tmp/pip-install-g1k2j1gd/mysql-python/
    Complete output (7 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-g1k2j1gd/mysql-python/setup.py", line 13, in <module>
        from setup_posix import get_config
      File "/tmp/pip-install-g1k2j1gd/mysql-python/setup_posix.py", line 2, in <module>
        from ConfigParser import SafeConfigParser
    ModuleNotFoundError: No module named 'ConfigParser'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

原因1:
环境中有一个python3.7,到时候pip默认也是用的python3.7的环境。而在Python 3.x 版本后,ConfigParser.py 已经更名为 configparser.py 所以出错。
解决:

[zhouchen@hadoop102 /]$ sudo find ./ -name 'configparser.py'
./usr/local/lib/python3.7/configparser.py
./opt/module/miniconda3/envs/superset/lib/python3.7/configparser.py
./opt/module/miniconda3/envs/superset/lib/python3.7/site-packages/future/moves/configparser.py
./opt/module/miniconda3/lib/python3.7/configparser.py
./opt/module/miniconda3/pkgs/python-3.7.7-hcff3b4d_5/lib/python3.7/configparser.py

[zhouchen@hadoop102 /]$ cp /usr/local/lib/python3.7/configparser.py /usr/local/lib/python3.7/ConfigParser.py
[zhouchen@hadoop102 /]$ cp /opt/module/miniconda3/envs/superset/lib/python3.7/configparser.py /opt/module/miniconda3/envs/superset/lib/python3.7/ConfigParser.py
[zhouchen@hadoop102 /]$ cp /opt/module/miniconda3/envs/superset/lib/python3.7/site-packages/future/moves/configparser.py /opt/module/miniconda3/envs/superset/lib/python3.7/site-packages/[zhouchen@hadoop102 /]$ future/moves/ConfigParser.py
[zhouchen@hadoop102 /]$ cp /opt/module/miniconda3/lib/python3.7/configparser.py /opt/module/miniconda3/lib/python3.7/ConfigParser.py
[zhouchen@hadoop102 /]$ cp /opt/module/miniconda3/pkgs/python-3.7.7-hcff3b4d_5/lib/python3.7/configparser.py /opt/module/miniconda3/pkgs/python-3.7.7-hcff3b4d_5/lib/python3.7/ConfigParser.py

原因2:
MySQL-python安装的问题。这个包的安装又依赖于mysql-devel,而mysql-devel的版本又会与Mysql-server亦或是mysql-common冲突。
解决:
在没有安装mysql的机器上安装Mysql-python规避这个问题。然后在该节点上安装open-falcon前端。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Open-Falcon 是一款开源的监控系统,可以监控各种资源的状态,包括服务器负载、网络状态、应用程序指标等。它提供了丰富的监控指标和灵活的告警机制,可以帮助运维人员及时发现和解决问题。下面是 Spring Boot 整合 Open-Falcon 的简单示例。 1. 引入依赖 在 pom.xml 文件中添加 Open-Falcon 的客户端依赖: ```xml <dependency> <groupId>com.github.open-falcon</groupId> <artifactId>falcon-sdk-java</artifactId> <version>0.1.0</version> </dependency> ``` 2. 配置 Open-Falcon 客户端 在 application.properties 文件中配置 Open-Falcon 客户端相关属性: ```properties # Open-Falcon 服务地址 falcon.server=http://localhost:6060/api/push # 应用程序名称 falcon.endpoint=my-application ``` 3. 编写监控指标 在代码中编写需要监控的指标,如 CPU 使用率、内存使用率等。可以使用 Open-Falcon 客户端提供的 API 将指标发送到 Open-Falcon 服务端: ```java import com.github.openfalcon.push.PushClient; import com.github.openfalcon.push.PushEntity; public class MyMonitor { private PushClient pushClient; public MyMonitor(String falconServer, String endpoint) { pushClient = new PushClient(falconServer, endpoint); } public void reportCpuUsage(float usage) { PushEntity entity = new PushEntity("cpu.usage", String.valueOf(usage), "", ""); pushClient.push(entity); } public void reportMemoryUsage(float usage) { PushEntity entity = new PushEntity("memory.usage", String.valueOf(usage), "", ""); pushClient.push(entity); } // 其他监控指标 } ``` 4. 启动应用程序 在应用程序启动时,创建监控对象,并在需要监控的地方调用相应的监控方法。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); MyMonitor monitor = new MyMonitor("http://localhost:6060/api/push", "my-application"); while (true) { float cpuUsage = getCpuUsage(); float memoryUsage = getMemoryUsage(); monitor.reportCpuUsage(cpuUsage); monitor.reportMemoryUsage(memoryUsage); Thread.sleep(1000); } } private static float getCpuUsage() { // 获取 CPU 使用率 return 0.5f; } private static float getMemoryUsage() { // 获取内存使用率 return 0.6f; } } ``` 以上是一个简单的 Spring Boot 整合 Open-Falcon 的示例,具体的监控指标和告警机制可以根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值