热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python学习获取上一分钟时间

python学习-获取上一分钟时间,Go语言社区,Golang程序员人脉社

一、需求

计算业务日志内一个接口请求的响应时间和超过1.5秒的数量,这里需要两个结果,因为有时间戳,打算每分钟运行一次脚本,计算上一分钟的日志信息。结果会传到falcon后由grafana展示

下面就是展示的结果,这是一个汇总图,三个节点,每个节点2个值,一共展示6个监控指标的数据,左侧是响应时间,右侧是超过1.5秒的数量
grafana

二、分享脚本内容如下

#!/usr/bin/env python
import os
import time
import commands
import requests
import json
import sys
import datetime

Time = time.strftime("%Y-%m-%d", time.localtime())
logtime = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M")
Hosts = ['node01','node02','node02']

var = sys.argv[1]
for host in Hosts:
    str1 = "grep "{logtime}" /home/xxx.log.{Time}|grep {host}|awk -F = '{str}'".format(logtime=logtime,Time=Time,host=host,str="{sum+=$NF}END{print sum/NR}")
    str2 = "grep "{logtime}" /home/xxx.log.{Time}|awk -F = '$1~"{host}" && $NF>1500'|wc -l".format(logtime=logtime,Time=Time,host=host)

    if var == "restime":
        str = str1
    elif var == "timeoutnum":
        str = str2
    print str

    class Monitor():
        def __url(self):
            value1 = commands.getoutput(str)
            value = value1.split(".")[0]
            if value.isdigit():
                value = value
            else:
                value = int(0)
            return value
               
        def __falcon(self,value):
            payload_list = []
            ts = int(time.time())
            temp_dict = {
                "endpoint": host,
                "metric": "requestPay"+"_"+var,
                "timestamp": ts,
                "step": 60,
                "value":value,
                "counterType": "GAUGE",
                "tags": "requestPay",
            }
            payload_list.append(temp_dict)
            print temp_dict
            requests.post("http://192.168.xx.xx:1988/v1/push", data=json.dumps(payload_list))
    
        def go(self):
            result = self.__url()
            self.__falcon(result)
    
    value = Monitor()
    value.go()

三、说明

Time = time.strftime("%Y-%m-%d", time.localtime())

这行是使用服务器本地时间,格式为2019-01-01这样的格式,用于匹配文件名后缀,如xxx.log.2019-01-01

logtime = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M")

这行是取当前时间上一分钟的时间,格式是2019-01-01 12:00,用于后面匹配日志时间戳,写shell使用的是下面的方法实现

# date --date="-1 minute" +%Y-%m-%d
2019-01-17

上面的时间函数是最近接触的,后面很多运维工作需要这样的方法

Hosts = ['node01','node02','node02']

这行是Hosts列表,假设现在有三个节点,那么我需要知道每个节点的监控数据,后面采用for循环读取列表内容

var = sys.argv[1]

读取脚本的第一个参数,这里针对两个监控指标分别设置一个参数,分别是restime、timeoutnum,代表响应时间和超时数量。

for host in Hosts:
    str1 = "grep "{logtime}" /home/xxx.log.{Time}|grep {host}|awk -F = '{str}'".format(logtime=logtime,Time=Time,host=host,str="{sum+=$NF}END{print sum/NR}")
    str2 = "grep "{logtime}" /home/xxx.log.{Time}|awk -F = '$1~"{host}" && $NF>1500'|wc -l".format(logtime=logtime,Time=Time,host=host)

使用for循环读取Hosts列表,因为后面上报数据的时候要带着节点信息,所以每次处理日志的时候需要搜索日志内的节点信息和监控数据,下面就是两个命令,目前分析日志只会这么用,囧!

    if var == "restime":
        str = str1
    elif var == "timeoutnum":
        str = str2
    print str

判断参数,如果restime就用str1分析日志,如果是timeoutnum就用str2分析日志

            value1 = commands.getoutput(str)
            value = value1.split(".")[0]

第一行是使用系统的命令,返回处理的结果
第二行是对取出的值进行分割,由于值是浮点数,所以用“.”分割取第一部分内容就是整数,这是split函数的用法,第一列[0],第二列[1],以此类推,当然如果不符合格式取出来有可能是其它信息,后面会进行判断

            if value.isdigit():
                value = value
            else:
                value = int(0)
            return value

这是一个if判断,看结果是否是整数。如果是整数value就不变,如果不是整数,那么赋值为0,由于接口不是每分钟都调用,所以一很多时候使用awk是报错了,那么这时候就认为没有值,所以是0

            temp_dict = {
                "endpoint": host,
                "metric": "requestPay"+"_"+var,
                "timestamp": ts,
                "step": 60,
                "value":value,
                "counterType": "GAUGE",
                "tags": "requestPay",
            }

注意这里endpoint的后面的host是个变量,就是上面for循环里面取到的Hosts值,这样在falcon就可以区分出来各个节点的监控数据了

下面的内容就是falcon上报的方法,网上很多介绍就是照葫芦画瓢,这里就不做介绍了

四、结果展示

cron里面的配置,每分钟一次上报到falcon

* * * * * cd /home/shell;python xxx.py restime;python xxx.py timeoutnum

推荐阅读
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
author-avatar
圈儿丫头1986
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有