美文网首页
OpenFalcon

OpenFalcon

作者: 胡萝卜苗儿 | 来源:发表于2021-01-21 15:04 被阅读0次

    组件架构

    OpenFalcon组件图.png

    transfer

    transfer接收客户端发送的数据,数据规整检查之后,根据一致性hash算法进行数据切片之后转发到judge和graph后端系统,每分钟可以转发超过500万条数据。

    transfer的数据来源:

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

    judge

    judge组件完成报警判定。用户在web portal配置相关的报警策略存储在MySQL中,heartbeat server定期加载MySQL中内容。judge定期和heartbeat server保持沟通,获取相关报警策略。

    hbs

    heartbeat sever会根据模板继承、模板项覆盖、报警动作覆盖、模板和hostGroup绑定,计算出最终关联到每个endpoint的告警策略,提供给judge组件使用。
    transfer转发到judge的每条数据,都会触发相关策略的判定。
    如果满足报警条件,则会发送给alarm,alarm再以邮件、短信、米聊等形式通知相关用户,也可以执行用户预先配置好的callback地址。用户可以灵活配置告警判定策略:如连续n次都满足条件、不同时间段不同阈值、维护周期内忽略等等。也支持突升突降类的判定和告警。

    API

    graph和API组件实现快速读取存储在graph里的数据。
    transfer将数据转发至graph组件,graph收到数据以后,以rrdtool数据归档方式存储,同时提供查询RPC接口。
    API面向终端用户,收到查询请求后会去多个graph里查询不同metric数据,汇总后统一返回给用户。

    graph

    监控系统数据量大、写操作多、查询需要高效率。
    open-falcon数据按照用途分成两类:绘图、数据挖掘。

    • 对于绘图的数据,查询要快,信息不能丢失。open-falcon参考rrdtool的理念,在数据每次存入的时候,自动采样、归档。归档策略如下,历史数据保存5年;按照平均值采样、最大值采样、最小值采样存三份。
    • 对于原始数据,transfer会打一份到hbase,也可以直接使用opentsdb。

    数据模型
    open-falcon采用和opentsdb相同的数据格式:metric、endpoint、多组key value tags。

    {
        metric: load.1min,
        endpoint: open-falcon-host,
        tags: srv=falcon,idc=aws-sgp,group=az1,
        value: 1.5,
        timestamp: `date +%s`,
        counterType: GAUGE,
        step: 60
    }
    
    • 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。

    ⚠️说明:这7个字段都是必须指定

    Alarm

    报警函数

    all(#3): 最新的3个点都满足阈值条件则报警
    max(#3): 对于最新的3个点,其最大值满足阈值条件则报警
    min(#3): 对于最新的3个点,其最小值满足阈值条件则报警
    sum(#3): 对于最新的3个点,其和满足阈值条件则报警
    avg(#3): 对于最新的3个点,其平均值满足阈值条件则报警
    diff(#3): 拿最新push上来的点(被减数),与历史最新的3个点(3个减数)相减,得到3个差,只要有一个差满足阈值条件则报警,设计diff和pdiff是为了解决流量突增突降报警
    pdiff(#3): 拿最新push上来的点,与历史最新的3个点相减,得到3个差,再将3个差值分别除以减数,得到3个商值,只要有一个商值满足阈值则报警
    lookup(#2,3): 最新的3个点中有2个满足条件则报警;非连续性报警函数,适用于在一定范围内容忍监控指标抖动的场景
    stddev(#7) = 3:离群点检测函数,取最新 7 个点的数据分别计算得到他们的标准差和均值,分别计为 σ 和 μ,其中当前值计为 X,那么当 X 落在区间 [μ-3σ, μ+3σ] 之外时,则认为当前值波动过大,触发报警;

    服务部署

    环境准备
    #安装mysql、redis
    yum install -y redis mysql-server
    #初始化表结构
    cd /tmp/ && git clone https://github.com/open-falcon/falcon-plus.git 
    cd /tmp/falcon-plus/scripts/mysql/db_schema/
    mysql -h 127.0.0.1 -u root -p < 1_uic-db-schema.sql
    mysql -h 127.0.0.1 -u root -p < 2_portal-db-schema.sql
    mysql -h 127.0.0.1 -u root -p < 3_dashboard-db-schema.sql
    mysql -h 127.0.0.1 -u root -p < 4_graph-db-schema.sql
    mysql -h 127.0.0.1 -u root -p < 5_alarms-db-schema.sql
    

    Openfalcon组件安装

    #下载二进制包
    https://github.com/open-falcon/falcon-plus/releases
    open-falcon-v0.3.tar.gz
    export FALCON_HOME=/home/work
    export WORKSPACE=$FALCON_HOME/open-falcon
    mkdir -p $WORKSPACE
    tar -xzvf open-falcon-v0.3.tar.gz -C $WORKSPACE
    #确认配置文件中数据库账号密码与实际相同,其中XXXX为访问mysql数据库密码,IP为openfalcon该组件服务所在IP地址。
    vim nodata/config/cfg.json
            "dsn": "openfalcon:XXXX@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true&wait_timeout=604800",
    vim hbs/config/cfg.json
        "database": "openfalcon:XXXX@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true",
    vim graph/config/cfg.json 
            "dsn": "openfalcon:XXXX@tcp(127.0.0.1:3306)/graph?loc=Local&parseTime=true",
    vim alarm/config/cfg.json 
            "addr": "openfalcon:XXXX@tcp(127.0.0.1:3306)/alarms?charset=utf8&loc=Local",
    vim aggregator/config/cfg.json 
            "addr": "openfalcon:XXXX@tcp(127.0.0.1:3306)/falcon_portal?loc=Local&parseTime=true",
    vim api/config/cfg.json
            "db": {
                    "falcon_portal": "openfalcon:XXXX@tcp(127.0.0.1:3306)/falcon_portal?charset=utf8&parseTime=True&loc=Local",
                    "graph": "openfalcon:1wsad44FASQ2HJK@tcp(127.0.0.1:3306)/graph?charset=utf8&parseTime=True&loc=Local",
                    "uic": "openfalcon:XXXX@tcp(127.0.0.1:3306)/uic?charset=utf8&parseTime=True&loc=Local",
                    "dashboard": "openfalcon:XXXX@tcp(127.0.0.1:3306)/dashboard?charset=utf8&parseTime=True&loc=Local",
                    "alarms": "openfalcon:XXXX@tcp(127.0.0.1:3306)/alarms?charset=utf8&parseTime=True&loc=Local",
     vim agent/config/cfg.json
        "heartbeat": {
            "enabled": true,
            "addr": "IP:6030",
            "interval": 60,
            "timeout": 1000
        },
        "transfer": {
            "enabled": true,
            "addrs": [
                "IP:8433"
            ],
            "interval": 60,
            "timeout": 1000
        },
    #在一台机器上启动所有的后端组件
    cd $WORKSPACE
    ./open-falcon start
    # 检查所有模块的启动状况
    ./open-falcon check
            falcon-graph         UP           53007
              falcon-hbs         UP           53014
            falcon-judge         UP           53020
         falcon-transfer         UP           53026
           falcon-nodata         UP           53032
       falcon-aggregator         UP           53038
            falcon-agent         UP           53044
          falcon-gateway         UP           53050
              falcon-api         UP           53056
            falcon-alarm         UP           53063
    debugging , check $WorkDir/$moduleName/log/logs/xxx.log
    # ./open-falcon [start|stop|restart|check|monitor|reload] module
    
    #对于只需要agent的功能的节点部署时只启动agent
    ./open-falcon start agent  启动进程
    ./open-falcon stop agent  停止进程
    ./open-falcon monitor agent  查看日志
    

    部署dashboard

    用户可以在dashboard首页以多个维度搜索endpoint,即主机列表;
    根据上报的tags来搜索关联的endpoint。host group的管理可以和服务树结合,机器进出服务树节点,相关的模板会自动关联或者解除。服务上下线不需要手动来变更监控。模板支持继承和策略覆盖,模板和host group绑定后,host group下的机器会自动应用该模板的所有策略。对于endpoint不是机器名的场景也可以写表达式达到监控的目的。

    #下载dashboard包
    cd openfalcon/
    git clone https://github.com/open-falcon/dashboard.git
    yum install -y python-virtualenv python-devel openldap-devel mysql-devel
    yum groupinstall "Development tools"
    cd openfalcon/dashboard
    virtualenv ./env
    #修改配置文件
    vim rrd/config.py
       ## API_ADDR 表示后端api组件的地址
       API_ADDR = "http://127.0.0.1:8080/api/v1" 
       ## PORTAL_DB_*, 默认用户名为root,默认密码为""
       ## ALARM_DB_*, 默认用户名为root,默认密码为""
    #启动前端
    bash control start
    #网页浏览
    open http://127.0.0.1:8081 in your browser.
    #停止运行
    bash control stop
    #查看日志
    bash control tail
    
    dashboard测试环境遇到的问题记录
    - 报错404
    发现api端口占用,但是修改dashbord配置 中api部分为8081  可以注册,登陆失败
    - 报错:No JSON object could be decoded
    解决:api8080端口被占用 ,修改dashbord配置 api部分 为8080 重启dashboard
    - 报错:HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api/v1/user/login (Caused by : [Errno 111] Connection refused)
    解决:重启open-falcon
    - 错误:no user
    解决:重新注册即可
    

    mymon

    mymon是Open-Falcon监控MySQL数据库运行状态的插件,采集global status, global variables, slave status以及innodb status等MySQL运行状态信息。

    ⚠️ 部署节点的go版本:go version go1.11.5 linux/amd64

    go get -u github.com/open-falcon/mymon
    cd $GOPATH/src/github.com/open-falcon/mymon
    make
    #修改配置文件
    [default]
    basedir = . # 工作目录
    log_dir = ./fixtures # 日志目录,默认日志文件为myMon.log,旧版本有log_file项,如果同时设置了,会优先采用log_file
    ignore_file = ./falconignore # 配置忽略的metric项
    snapshot_dir = ./snapshot # 保存快照(process, innodb status)的目录
    snapshot_day = 10 # 保存快照的时间(日)
    log_level  = 5 #  日志级别[RFC5424]
    # 0 LevelEmergency
    # 1 LevelAlert
    # 2 LevelCritical
    # 3 LevelError
    # 4 LevelWarning
    # 5 LevelNotice
    # 6 LevelInformational
    # 7 LevelDebug
    falcon_client=http://127.0.0.1:1988/v1/push # falcon agent连接地址
    [mysql]
    user=root # 数据库用户名
    password=1tIsB1g3rt # 您的数据库密码
    host=127.0.0.1 # 数据库连接地址
    port=3306 # 数据库端口
    
    * * * * * cd ${WORKPATH} && ./mymon -c etc/myMon.cfg
    
    #ignore项
    ignore项配置,是用来屏蔽之前在falcon中设好的报警项,会将原有的metric更改名称之后上传,使原有的报警策略不再生效。由于falcon中的屏蔽策略,只能屏蔽endpoint级别,所以在mymon中的ignore功能是帮助提高了报警屏蔽粒度,而非忽略该metric的上报。
    #同步延迟
    关于同步延迟检测的metric有两个: Seconds_Behind_Master、Heartbeats_Behind_Master。
    Seconds_Behind_Master是MySQLSHOW SLAVE STATUS输出的状态变量。由于低版本的MySQL还不支持HEARTBEAT_EVENT,在低版本的MySQL中该状态可能会由于IO线程假死导致测量不准确,因此mymon增加了Heartbeats_Behind_Master。它依赖于pt-heartbeat,统计基于pt-heartbeat生成的mysql.heartbeat表中的ts字段值与从库当前时间差。如果未配置pt-heartbeat,则该项上报-1值。
    关于pt-heartbeat的配置使用: https://www.percona.com/doc/percona-toolkit/LATEST/pt-heartbeat.html
    
    告警列表.png
    绘图.png

    相关文章

      网友评论

          本文标题:OpenFalcon

          本文链接:https://www.haomeiwen.com/subject/kmsxzktx.html