用70行代碼實現日誌剖析器​

來源:互聯網
上載者:User
python又一力作,感受python的強大。用70行代碼實現日誌剖析器

功能介紹:可直接對文本日至進行分組和排序功能,完了輸出結果粘貼到excel裡就可以直接組建圖表,對於排查一些生產環境問題有很大的作用。


代碼:

#encoding=utf-8from optparse import OptionParserimport re  def get_args():    def get_parser():        usage = u"""%prog -f filename -r rule [-d] [-c]用途:對文字檔按照指定模式進行分組並排序,主要分析文本日誌用注意:如果Regex裡有分組,則提取第一分組,      如果不希望這樣,請使用正則的無捕獲分組(?:)樣本:統計日誌裡每分鐘的日誌量,預設按時間正序排列      python group.py -f log.txt -r "\d\d\d\d\-\d\d\-\d\d \d\d:\d\d"      統計日誌裡每個ip出現的次數,並按出現次數倒序排列      python group.py -f input.txt -r "\d+\.\d+.\d+.\d+" -c -d"""        return OptionParser(usage)      def add_option(parser):        parser.add_option("-f", "--file", dest="filename",           help=u"需要分組的文字檔", metavar="FILE")        parser.add_option("-r", "--rule", dest="rule",           help=u"分組的Regex", metavar="REGEX")        parser.add_option("-d", action="store_true",            dest="reverse", default=False, help=u"反序排列")        parser.add_option("-c", action="store_true",            dest="orderbycount", default=False,            help=u"按數量排序,預設按匹配字串排序")      def get_options(parser):        options, args = parser.parse_args()        if not options.filename:            parser.error('沒有指定檔案名稱')        if not options.rule:            parser.error('沒有指定分組規則')        return options      parser = get_parser()    add_option(parser)    return get_options(parser)  options      = get_args()filename     = options.filenamerule         = options.rulereverse      = options.reverseorderbycount = options.orderbycountregex        = re.compile(rule, re.IGNORECASE)keys         = {}  def counter_key(key):    keys.setdefault(key, 0)    keys[key] += 1  def print_keys():    sort_key = (lambda d:d[1]) if orderbycount else (lambda d:d[0])    temp_items = sorted(keys.items(), key=sort_key, reverse=reverse)    for item in temp_items:        key = item[0]        print key, keys[key]  def get_key(line):    m = regex.search(line)    if m:        return m.group() if regex.groups == 0 else m.group(1)    return '!NotMatch!'  with open(filename) as f:    for line in f:        key = get_key(line)        counter_key(key)  print_keys()
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.