Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

监控 | open-falcon | 安装

人生何处是归途 2019-02-26 17:48:00 阅读数:284 评论数:0 点赞数:0 收藏数:0

监控 | open-falcon | 安装

1. 简介

主要看中了它的水平扩展,画图比zabbix要友好,告警支持简单压缩。架构

  • 绿色:基础组件;
  • 蓝色:作图链路
  • 红色:报警链路
  • 橙色:域名

 架构架构

 

1.1 基础组件

agent

每台实例上都需安装,agent从

hbs上拉取配置信息,采集数据后上报(

push)给

transfer。

transfer

transfer是一个无状态的集群,挂掉1台或多台均无影响。transfer接收agent上报的数据,然后使用一致性哈希进行数据分片、并把分片后的数据转发给graph、judge集群(transfer还会打一份数据到opentsdb)。类似zabbix里的proxy角色。transfer 提供

jsonRpc接口和

telnet接口两种方式transfer集群可使用域名,让agent通过域名来访问,从而实现高可用性和自动切换,同时DNS还可以保证优先用本机房内的transfer

transfer的数据来源,一般有三种:

  • falcon-agent采集的基础监控数据
  • falcon-agent执行用户自定义的插件返回的数据
  • client library:线上的业务系统,都嵌入使用了统一的perfcounter.jar,对于业务系统中每个RPC接口的qps、latency都会主动采集并上报

center-status

中心存储,包括mysql、redis。mysql用于存储配置信息、索引数据。redis用于报警缓存队列。

1.2 作图链路

graph

graph组件用于存储、归档作图数据,可以集群部署。每个graph实例会处理一个分片的数据: 接收transfer发送来的分片数据,归档、存储、生成索引;接受query对该数据分片的查询请求。

query

数据分片存储在graph上,用户查询起来比较麻烦。query负责提供一个统一的查询入口、屏蔽数据分片的细节。query的使用场景主要有:(1)dashboard图表展示 (2)使用监控数据做二次开发。建议将query集群挂载到一个域名下。考虑到高可用,query至少部署两个实例(当前,两个实例部署的IDC、机架等需要负责高可用的规范)。

dashboard

dashboard用户监控数据的图表展示,是一个web应用

1.3 报警链路

judge

judge用于实现报警策略的触发逻辑

hbs

hbs是Open-Falcon的配置中心,负责 适配系统的配置信息、管理agent信息等。hbs单实例部署,每个实例都有完整的配置信息

protal

portal提供监控策略管理相关的UI,使用频率较低、系统负载很小。

uic

uic是用户信息管理中心,提供用户管理的UI,使用频率较低、系统负载较小

alarm(sender)

alarm负责整理报警信息,使变成适合发送的形式。alarm做了一些报警合并相关的工作,当前只能单实例部署(待优化)

links

links负责报警合并后的详情展示工作。

2. 安装

open-falcon安装主要有3部分

  • 环境准备(gcc, go mysql)
  • 后端部署
  • 前端部署

2.1 环境准备

更新yum源

1.http://mirrors.163.com/.help/centos.html放入

/etc/yum.repos.d/目录1.yum clean all清空缓存

安装gcc

yum -y install gcc/*安装gcc库

安装git

yum install -y git安装git,版本>=1.7.5即可

安装go

tar -C /usr/local -xzf go1.8XXX下载go并解压缩

vim ~/.bashrc添加环境变量export PATH=$PATH:/usr/local/go/bin

source ~/.bashrc执行生效,可用

go version命令检查版本

安装Redis

安装扩展源

yum install -y epel-release

systemctl start redis启动

systemctl enable redis设置开机启动

systemctl status redis查看启动状态

安装mysql

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm获取扩展源

rpm -ivh mysql-community-release-el7-5.noarch.rpm安装

yum install mysql-server安装完毕后启动

systemctl start mysql启动

systemctl status mysql查看启动状态

设置环境变量

export GOROOT=/usr/lib/golang export GOPATH=/hom

初始化mysql表结构

cd /tmp/ && git clone https://github.com/open-falcon/falcon-plus.git cd /tmp/falcon-plus/scripts/mysql/dbschema/ mysql -h 127.0.0.1 -u root -p < 1uic-db-schema.sql mysql -h 127.0.0.1 -u root -p < 2portal-db-schema.sql mysql -h 127.0.0.1 -u root -p < 3dashboard-db-schema.sql mysql -h 127.0.0.1 -u root -p < 4graph-db-schema.sql mysql -h 127.0.0.1 -u root -p < 5alarms-db-schema.sql rm -rf /tmp/falcon-plus/

输入过程中提示让输入密码,这里还未设置密码,直接回车即可

mysql设置密码

systemctl status mysql查看mysql运行状态

mysqladmin -u root password 'XXXX'设置密码

mysql -u root -p登陆测试

2.2 安装后端

下载二进制包

https://book.open-falcon.org/zh02/quickinstall/prepare.html export FALCONHOME=/home/work export WORKSPACE=$FALCON_HOME/open-falcon mkdir -p $WORKSPACE tar -xzvf open-falcon-v0.2.1.tar.gz -C $WORKSPACE

修改配置文件

  1. aggregator
    路径:/home/work/open-falcon/aggregator/config/cfg.json
    "database": { "addr": "realuser:realpassword@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true", "idle": 10....

修改里面database里的用户名密码部分

  1. graph
    路径:/home/work/open-falcon/graph/config/cfg.json
    "db": { "dsn": "realuser:realpassword@tcp(127.0.0.1:3306)/graph?loc=Local&parseTime=true", "maxIdle": 4 },

修改db部分用户名密码

  1. hbs
    路径:/home/work/open-falcon/hbs/config/cfg.json
    "database": "realuser:realpassword@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true", "hosts": "",
  2. nodata
    路径:/home/work/open-falcon/nodata/config/cfg.json
    "config": { "enabled": true, "dsn": "realuser:realpassword@tcp(127.0.0.1:3306)/falconportal?loc=Local&parseTime=true&waittimeout=604800", "maxIdle": 4 }

修改dsn用户密码部分

  1. api
    路径:/home/work/open-falcon/api/config/cfg.json
    "db": { "falconportal": "realuser:realpassword@tcp(127.0.0.1:3306)/falconportal?charset=utf8&parseTime=True&loc=Local", "graph": "realuser:realpassword@tcp(127.0.0.1:3306)/graph?charset=utf8&parseTime=True&loc=Local", "uic": "realuser:realpassword@tcp(127.0.0.1:3306)/uic?charset=utf8&parseTime=True&loc=Local", "dashboard": "realuser:realpassword@tcp(127.0.0.1:3306)/dashboard?charset=utf8&parseTime=True&loc=Local", "alarms": "realuser:realpassword@tcp(127.0.0.1:3306)/alarms?charset=utf8&parseTime=True&loc=Local", "db_bug": true },

修改里面所有realuser和realpassword部分

  1. alarm
    路径:/home/work/open-falcon/alarm/config/cfg.json
    "falconportal": { "addr": "realuser:real_password@tcp(127.0.0.1:3306)/alarms?charset=utf8&loc=Asia%2FChongqing", "idle": 10, "max": 100 }

启动后端模块

cd /home/work/open-falcon ./open-falcon start /#启动 ./open-falcon check /#检查启动状况

falcon-graph UP 18987 falcon-hbs UP 18999 falcon-judge UP 19010 falcon-transfer UP 19019 falcon-nodata UP 19028 falcon-aggregator UP 19037 falcon-agent UP 19048 falcon-gateway UP 19058 falcon-api UP 19066 falcon-alarm UP 19080

都是UP则表示启动成功

支持如下命令

./open-falcon [start|stop|restart|check|monitor|reload] module

2.3 安装前端

创建前端目录

export FRONTSPACE=/home/front/open-falcon mkdir -p $FRONTSPACE

下载包

cd $FRONTSPACE 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" -y cd $FRONTSPACE/dashboard/ virtualenv ./env ./env/bin/pip install -r pip_requirements.txt

修改配置文件

路径:/home/front/open-falcon/dashboard/rrd/config.pyPORTALDBUSER = os.environ.get("PORTALDBUSER","falcon") PORTALDBPASS = os.environ.get("PORTALDBPASS","falcon") 和 ALARMDBUSER = os.environ.get("ALARMDBUSER","root") ALARMDBPASS = os.environ.get("ALARMDBPASS","")

按照实际情况修改DB用户名密码信息

2.4 启动和停止

开发模式启动

bash control start /#启动 bash control stop /#停止 bash control tail /#查看日志

默认没有任何账户,手动注册的第一个

root账户自动设置为超级管理员。

3. 使用

3.1 安装交换机监控

open-falcon作为一个监控框架,可以去采集任何系统的监控指标数据,只要将监控数据组织为open-falcon规范的格式就OK了。这里使用

swcollector模块采集。

原理

swcollector根据配置文件中,配置好的交换机IP列表或者IP网段,每隔一个固定的周期,通过SNMP协议,来采集交换机的运行指标,并上报给Open-Falcon。

注意点:

  1. swcollector需要安装在有交换机SNMP访问权限的服务器上。
  2. 因ping需要root权限,因此swcollector需要

root权限运行

  1. 需安装

snmpwalk命令

安装

1.下载:https://github.com/gaochao1/swcollector/releases1.安装下载完成后,直接解压后即可使用

chmod +x control

支持的用法:

./control build|pack|start|stop|restart|status|tail

修改配置文件

  1. cfg.json
    该文件为
    { "debug": false, "debugmetric":{ "endpoints":["vpn-lw"], "metrics":["AnyconnectSession","ConnectionStat"], "tags":"" }, "switch":{ "enabled": true, "ipRange":[ "172.19.0.10" /#修改为实际的IP段 ], "gosnmp":true, /#修改为false,使用snmpwalk采集 "pingTimeout":300, "pingRetry":4, "community":"XXX", /#修改为实际的团体字 "snmpTimeout":1000, "snmpRetry":5, "ignoreIface": ["Nu","NU","Vlan","Vl"], "ignoreOperStatus": true, "speedlimit":0, "ignorePkt": true, "pktlimit": 0, "ignoreBroadcastPkt": true, "broadcastPktlimit": 0, "ignoreMulticastPkt": true, "multicastPktlimit": 0, "ignoreDiscards": true, "discardsPktlimit": 0, "ignoreErrors": true, "errorsPktlimit": 0, "ignoreUnknownProtos":true, "unknownProtosPktlimit": 0, "ignoreOutQLen":true, "outQLenPktlimit": 0, "fastPingMode": true, "limitConcur": 1000, "limitCon": 4 }, "switchhosts":{ "enabled":false, /#允许修改主机名,启用该功能 "hosts":"./hosts.json" }, "customMetrics":{ "enabled":false, /#启用该功能以便给某项值打metrics "template":"./custom.json" }, "transfer": { "enabled": true, "addr": "127.0.0.1:8433", /#修改为服务器实际地址,端口不变 "interval": 300, /#修改数据发送间隔。修改为60S "timeout": 1000 }, "http": { "enabled": false, "listen": ":1989", "trustIps":["192.168.0.1","192.168.0.2"] } }

ipRange修改为实际的交换机IP段。

1.host.json这里主要存储IP地址和主机名的映射关系1.custom.json这个主要存储交换机自定义的oid等信息

使用

启动后,在服务器的dashboard上会自动显示出交换机来,且以主机名的形式显示;switchname

选择该交换机后点击“刷新counter列表”会将采集到的所有端口信息显示出来一直在想交换机的流量图展示如何像zabbix一样通过screen来展示。最重要的是能够自动生成。测试了好几次终于发现counters列表是支持正则表达式的。

交换机的一个端口图展示在一个图里的方法

metric=switch.if.In ifName=40GE1/0/1 metric=switch.if.Out ifName=40GE1/0/1

然后视角选择counter视角即可。假如让特定类型端口的在一张图上展示,则可以使用

正则表达式

metric=switch.if.In ifName=40GE./$ metric=switch.if.Out ifName=40GE./$

 

enter description hereenter description here可以发现所有的都展示出来了,但是一些端口是down的也在里面。

 

版权声明
本文为[人生何处是归途]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/hbgzy/p/10438952.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领