• 日志管理


    背景

    互联网、传统企业级软件等应用,每天产生海量的日志信息,然而很多情况下被企业和员工所无视,只有遇到线上bug等情况下才会绞尽脑汁索要或者下载有用的日志。挑选有用日志的过程是无比辛苦的,你需要先远程到服务器上,找到日志目录,查看日志文件最后修改时间,比对bug出现时间,ok,下载,怎么会没有呢?会不会被load balancer导到另外一台了呢?噩梦又要重新上演... 经过一个下午的定位,终于找到bug的原因了,好吧,只能晚上加班改了... 苦逼的循环,这只是开始。
    我们可以做些什么改变现状呢?
    1. log记录在服务器 -> 保存于日志管理系统,如splunk;
    2. log记录到文件 -> 导出到stdout/stderr。
    第一个比较好理解,日志文件保存在日志管理系统,集中存储,便于索引和查询。第二个呢?就需要提一下SaaS(软件即服务)设计和开发的一个优秀的方法论,[12-factor](https://12factor.net/zh_cn/logs)。12-factor 中将日志当作事件流,将所有运行中进程和后端服务的输出流按照时间顺序收集起来,12-factor应用本身从不考虑存储自己的输出流,不应该试图去写或者管理日志文件,而是通过stdout输出事件流,在测试和产品环境下,输出流由运行环境截获,发送给日志处理程序。
    

    日志管理的功能分类

    1. 数据/日志采集和传输;
    2. 日志的索引和存储;
    3. 日志检索、分析及数据可视化。

    splunk日志管理系统

    组件

    • splunk forwarder (heavy, light, universal*)
    • splunk enterprise
    • splunk cloud (saas)

    部署

    单机模式

    本文的部署是基于Docker的。请阅读下面内容之前确保掌握docker的基本知识如image、container、docker compose等。
    app日志通过Splunk HTTP Event Collector 流入Splunk Enterprise。
    app的docker-compose.yml文件如下:
    
    version: '2'
    services:
      nginx:
        hostname: app
        image: nginx
        ports:
          - 80:80
          - 443:443
        logging:
          driver: splunk
          options:
            splunk-token: 7937D648-3506-4217-8DE2-EEF4F4DBCADC
            splunk-url: "http://172.22.0.3:8088"
            splunk-source: docker
            splunk-sourcetype: docker1
            splunk-index: main
            tag: "{{.Name}}/{{.FullID}}"
    
    
    splunk enterprise的docker-compose.yml如下:
    
    version: '2'
    services:
      vsplunk:
        image: busybox
        volumes:
          - /opt/splunk/etc
          - /opt/splunk/var
    
      splunk:
        hostname: splunk
        image: splunk/splunk:latest
        environment:
          SPLUNK_START_ARGS: --accept-license
          SPLUNK_ENABLE_LISTEN: 9997
          SPLUNK_ADD: tcp 1514
        volumes_from:
          - vsplunk
        ports:
          - "8000:8000"  # web access
          - "9997:9997"  # for forwarder
          - "8088:8088"
    
    app使用的image为nginx,当访问nginx服务时,会输出访问信息到标准输出。splunk enterprise使用的是splunk公司提供的image。docker提供了logging的功能,driver有很多,较为常用的是splunk和fluentd,本文以splunk driver为例。
    splunk-token由splunk enterprise提供,配置token的方式有以下3种:
    * Web ui,参考http://dev.splunk.com/view/event-collector/SP-CAAAE7C
    * CLI,参考http://dev.splunk.com/view/event-collector/SP-CAAAE7D
    * 配置文件,路径为/opt/splunk/etc/apps/splunk_httpinput/local/inputs.conf
    

    distributed indexers distributed pic

    分布式部署和单机部署相比,横向拓展良好。
    

    cluster indexers splunk cluster pic

    集群部署可以实现灾备,横向拓展,提高检索速度等。
    

    extend reading:

    • fluentd/ElasticSearch/kibana

    Reference

    http://docs.fluentd.org/articles/free-alternative-to-splunk-by-fluentd
    http://docs.splunk.com/Documentation/Splunk/6.5.1/Indexer/Aboutclusters
    http://docs.splunk.com/Documentation/Splunk/6.5.1/Indexer/HowSplunkstoresindexes
    http://docs.fluentd.org/articles/quickstart

  • 相关阅读:
    Linux监控端口与性能分析的
    对大数据简单生态的部分认知随笔
    致敬那些年对nginx踩过的坑
    面试中一些比较尴尬的问题
    硬盘的接口有哪几种
    硬盘的逻辑结构
    Oracle数据库的备份与恢复还原笔记
    Linux安装Mysql5.7.29
    [转]为什么会有OPTION请求?
    图解HTTP(5-6章节)---阅后笔记
  • 原文地址:https://www.cnblogs.com/willsuna/p/6119984.html
Copyright © 2020-2023  润新知