2019独角兽企业重金招聘Python工程师标准>>>

nginx状态码监控

#falcon的agent部署目录
[root@nginxtest scripts]# pwd
/home/falcon/scripts[root@nginxtest scripts]# cat sentry_count.sh
#!/bin/bash
#sentry数量统计ts=`date +%s`
t=`LC_ALL=en_US.UTF-8 date '+%d/%b/%Y:%H:%M' -d "-1 minute"`
valus=`tail -1000000 /usr/local/nginx/logs/access.log |egrep 'sentry.chuntianu.me' |egrep 'POST'|wc -l`
curl -X POST -d "[{\"metric\": \"sentry_nums\", \"endpoint\": \"nginxtest\", \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"request=post,nginx_cluster=nginxtest\"}]" http://127.0.0.1:1988/v1/push[root@nginxtest scripts]# cat nginx.sh
#!/bin/bash
#访问状态统计
codes="302 400 401 403 404 500 502 503"for code in $codes;dots=`date +%s`;t=`LC_ALL=en_US.UTF-8 date '+%d/%b/%Y:%H:%M' -d "-1 minute"`valus=`tail -1000000 /usr/local/nginx/logs/access.log | grep -v 'tvdoctor' | grep $t | awk '{print $9}' | grep $code | wc -l`curl -X POST -d "[{\"metric\": \"nginx_code\", \"endpoint\": \"nginxtest\", \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"code=$code,nginx_cluster=nginxtest\"}]" http://127.0.0.1:1988/v1/push

调用数据

在open-falcon的expression配置相关的表达式即可!

该表达式的功能是采集sentry消息的数量,如果数量连续3次大于100则告警!

参考文档

http://book.open-falcon.org/zh/usage/data-push.html
http://book.open-falcon.org/zh/philosophy/tags-and-hostgroup.html
https://github.com/GuyCheung/falcon-ngx_metric


etcd监控

action1
#!/bin/bash#端口监控
CONN_STATUS=`netstat -lntp |egrep ':2379'|egrep -v '127.0.0.1' |wc -l`
curl -X POST -d "[{\"metric\":etcd_listen \"CONN_STATUS\", \"endpoint\": etcd_clusters, \"db\", \"timestamp\": $ts,\"step\": 60,\"value\": $CONN_STATUS,\"counterType\": \"GAUGE\",\"tags\": \"service=etcd,port=2379\"}]" http://127.0.0.1:1988/v1/pushcurl --cacert /home/etcd/ca/ca.pem --cert /home/etcd/ca/client.pem --key /home/etcd/ca/client-key.pem https://127.0.0.1:2379/metrics 2>/dev/null |grep -v '#' >/tmp/etcd_monitor.txt
etcd_items="/tmp/etcd_monitor.txt"
ts=`date +%s`;#"领导者是否存在; 领导者变化的数量; 共识提案的总数; 共识提案的总数; 目前正在处理的提案数量; 失败提案总数"
items1="has_leader leader_changes_seen_total proposals_applied_total proposals_committed_total proposals_failed_total proposals_pending"#"wal调用的fsync总延迟时间; 后端调用总延迟时间"
items2="wal_fsync_duration_seconds_count backend_commit_duration_seconds_count"#"发送给具有ID的对等体的总字节数; 从具有ID的对等方收到的总字节数; 发送给grpc客户端的总字节数; 接收到grpc客户端的总字节数; 同级之间总的往返时间"
items3="peer_sent_bytes_total peer_received_bytes_total grpc_received_bytes_total grpc_sent_bytes_total peer_round_trip_time_seconds_count"#"打开文件描述符的数量; 允许打开文件描述符的最大数量"
items4="process_open_fds process_max_fds"all_items="items1 items2 items3 items4"for item in $all_items;do#sever监控if [ $item == items1 ];thenfor i in $items1;dovalus=`cat $etcd_items |grep "$i" |awk '{print $2}'`curl -X POST -d "[{\"metric\":etcd_server, \"etcd_status\", \"endpoint\": etcd_cluster, \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"item=etcd_server_$i,service=etcd\"}]" http://127.0.0.1:1988/v1/pushdone#磁盘elif [ $item == items2 ];thenfor i in $items2;dovalus=`cat $etcd_items |grep "$i" |awk '{print $2}'`curl -X POST -d "[{\"metric\":etcd_disk, \"etcd_status\", \"endpoint\": etcd_cluster, \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"item=etcd_server_$i,service=etcd\"}]" http://127.0.0.1:1988/v1/pushdone#网络elif [ $item == items3 ];thenfor i in $items3;dovalus=`cat $etcd_items |grep "$i" |awk '{print $2}'`curl -X POST -d "[{\"metric\":etcd_net, \"etcd_status\", \"endpoint\": etcd_cluster, \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"item=etcd_server_$i,service=etcd\"}]" http://127.0.0.1:1988/v1/pushdone#其他elif [ $item == items4 ];thenfor i in $items4;dovalus=`cat $etcd_items |grep "$i" |awk '{print $2}'`curl -X POST -d "[{\"metric\":etcd_fd, \"etcd_status\", \"endpoint\": etcd_cluster, \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"item=etcd_server_$i,service=etcd\"}]" http://127.0.0.1:1988/v1/pushdonefi
done

采集某时间段内nginx日志

#!/bin/bash
#sentry数量统计apis="3 24"
for api in $apis;dots=`date +%s`;t1=`LC_ALL=en_US.UTF-8 date '+%d\/%b\/%Y:%H:%M' -d "-3 minute"` t2=`LC_ALL=en_US.UTF-8 date '+%d\/%b\/%Y:%H:%M' -d "-1 minute"` if [ $api -eq 3 ];thenproject=medweb_onlineelif [ $api -eq 24 ];thenproject=opfivalus=`tail -1000000 /usr/local/nginx/logs/access.log |egrep 'sentry.chunyu.me' |sed -n "/$t1/,/$t2/"p |egrep 'POST'|egrep "/api/$api/" |wc -l`curl -X POST -d "[{\"metric\": \"sentry\", \"endpoint\": \"nginxtest\", \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"type\":\"sentry\",\"counterType\": \"GAUGE\",\"tags\": \"project=$project\"}]" http://127.0.0.1:1988/v1/push#脚本测试
echo $t
echo $t1
echo $t2
echo $api:$project:$valus
done

etcd监控

#!/bin/bashmonit_keys=`curl --cacert /home/etcd/ca/ca.pem --cert /home/etcd/ca/client.pem --key /home/etcd/ca/client-key.pem https://127.0.0.1:2379/metrics 2>/dev/null |grep -v '#'`
ts=`date +%s`;
#"领导者是否存在; 领导者变化的数量; 共识提案的总数; 共识提案的总数; 目前正在处理的提案数量; 失败提案总数; wal调用的fsync总延迟时间; 后端调用总延迟时间; 发送给具有ID的对等体的总字节数; 发送给grpc客户端的总
字节数; 接收到grpc客户端的总字节数; 同级之间总的往返时间; 打开文件描述符的数量; 允许打开文件描述符的最大数量"
items="etcd_server_has_leader etcd_server_leader_changes_seen_total etcd_server_proposals_applied_total etcd_server_proposals_committed_total etcd_server_proposals_failed_total etcd_server_proposals_pending etcd_disk_wal_fsync_duration_seconds_count etcd_disk_backend_commit_duration_seconds_count etcd_network_peer_sent_bytes_total etcd_network_client_grpc_received_bytes_total etcd_network_client_grpc_sent_bytes_total etcd_network_peer_round_trip_time_seconds_count process_open_fds process_max_fds"for item in $items;dovalus=`echo $monit_keys|xargs -n2 |grep "$item" |awk '{print $2}' |uniq`if [ "$item"x = "etcd_network_peer_sent_bytes_total"x ];thenvalus=`echo $valus |awk '{print $1}' |awk -F'e+' '{print $1}'`valus=$(printf "%.f" `echo "$valus*10000000"|bc`)fiif [ "$item"x == "etcd_network_peer_received_bytes_total"x ];thenvalus=`echo $valus |awk '{print $1}' |awk -F'e+' '{print $1}'`valus=$(printf "%.f" `echo "$valus*1000000"|bc`)ficurl -X POST -d "[{\"metric\": \"$item\", \"endpoint\": \"configcenter\", \"timestamp\": $ts,\"step\": 60,\"value\": $valus,\"counterType\": \"GAUGE\",\"tags\": \"etcd_cluster=configcenter,srv=etcd\"}]" http://127.0.0.1:1988/v1/pushdone

注意:本段代码的重点在“valus=echo $monit_keys|xargs -n2 |grep "$item" |awk '{print $2}' |uniq”中 “uniq” 的使用,实际环境中有部分关键字在“$monit_keys”中会重复出现,如果不加uniq会同时有多个数据被push,这样就会导致curl POST数据是报错“cannot decode body”。当然也如果通过关键字过滤出来的monit_keys完全一致,也可以写成“monit_keys=curl --cacert /home/etcd/ca/ca.pem --cert /home/etcd/ca/client.pem --key /home/etcd/ca/client-key.pem https://127.0.0.1:2379/metrics 2>/dev/null |grep -v '#' |uniq”,但是在本脚本中过滤出来的keys值不完全一致,但是value相同,所以只能加在“valus=...”。

转载于:https://my.oschina.net/adailinux/blog/1612672

记一次open-falcon手动push数据相关推荐

  1. 记一次微信公众号后台数据抓取

    记一次微信公众号后台数据抓取 缘起 思路 缘起 自己参与的公众号做年末总结,需要进行数据爬取,但是微信自带的api只能进行最多一个月的数据对照,不太方便,于是决定自己写一个脚本.原本想用py爬虫,但是 ...

  2. android手动创建数据表,Android开发—数据库应用—手动创建(SQLite)数据库--手动创建数据表(table)...

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:数据库应用-手 ...

  3. Apache Falcon简介-Hadoop数据生命周期管理框架

    Apache Falcon是一个开源的hadoop数据生命周期管理框架, 它提供了数据源 (Feed) 的管理服务,如生命周期管理,备份,存档到云等,通过Web UI可以很容易地配置这些预定义的策略, ...

  4. Robo 3T手动添加数据(window)

    一.创建数据库连接 打开Robo 3T,点击Create 设置参数,点击保存 点击Connect,即可连接成功 二.创建数据库 鼠标右击New Connection,选择Create Database ...

  5. Wonderware配置-手动修改数据 4

    Wonderware配置-手动修改数据 Wonderware手动修改数据有两种方式:脚本法和手动方式. 一.脚本法 1.      依次打开:开始菜单→Microsoft SQL Server 201 ...

  6. 如何向localStorage上的数组push数据

    如何向localStorage上的数组push数据 localStorage只能存储String字符串,要用JSON对象转化才能接收 var arrayObject = []; arrayObject ...

  7. 【PowerQuery】在Excel中手动刷新数据连接

    将数据通过PowerQuery 导入进来后,这里将进行数据分组运算,最终的数据计算结果将保存在Excel 表格中,图1为数据导入结果. 图1 使用PowerQuery 加载导入的数据 在Excel中, ...

  8. 记一次el-select远程搜索默认数据回显问题

    在el-select远程搜索中会有个回显问题 就是明明传入了绑定值但是却会显示不出来 解决代码如下 <el-selectv-model="ruleForm.selectId" ...

  9. Mybatis openSession.commit()手动提交数据和openSession.commit(true)自动动提交数据

    openSession.commit(true)自动提交数据

最新文章

  1. mysql与php驱动,用PHP和MySQL构建一个数据库驱动的网站(四)-PHP教程,PHP基础
  2. Mysql安装两种方法
  3. Sequence in the Pocket
  4. HTML 中的字符实体集
  5. Mybatis基于XML配置SQL映射器(二)
  6. C++笔记-获取光标(非鼠标坐标)在屏幕的位置
  7. php ascii art,ASCII art (简体中文)
  8. 关于@Import注解的几个问题
  9. 从0开始学java视频_Java全套学习视频放送,从零开始一步步掌握Java技能!
  10. 预充电电路工作原理_变频冰箱开关电源电路工作原理及检修思路
  11. bzoj3524: [Poi2014]Couriers / bzoj2223: [Coci 2009]PATULJCI 主席树
  12. rac节点频繁重启的问题分析
  13. VS2005无法打开网站
  14. LoadRunner 测试脚本
  15. delphi 去掉字符串中所有的标点符号_[话俾你知]Python使用正则处理字符串技巧(分割、替换)...
  16. 深信服 adesk linux 客户端,Sangfor-aDesk巡检工具(深信服桌面云智能交付巡检助手)V2.1 正式版...
  17. 约瑟夫环两种解题方式
  18. 一级计算机快捷键大全,计算机快捷键大全(最全篇)
  19. 在个人计算机系统中 常见外存储器有(),内蒙古事业单位专业知识计算机考试题库:计算机基础练习题(22)...
  20. NUCLEO-L432KC实现GPIO控制(STM32L432KC)

热门文章

  1. 【SpringBoot】SpringBoot最精简的设置
  2. SVN Error: “' 'x' isn't in the same repository as 'y' ” during merge (并不在同一个版本库中)...
  3. 二叉树的实现(Java语言描述)
  4. 面试题10:二进制中1的个数
  5. 13个免费创建和托管网站的在线工具[图]
  6. Java虚拟机学习 - 体系结构 内存模型
  7. DB2中sql语句占位符问题
  8. 学习笔记 ---- 设计模式之观察者模式
  9. VIVADO时序约束及STA基础
  10. pipreqs 组件