日志太多怎么搞?一套爬虫监控系统全搞定!

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 作者: Lateautumn4lin来源:云爬虫技术研究笔记前言很多读者也咨询过我怎么去监控爬虫系统的日志?这里我们给出一个通用的轻量级监控系统架构方式---ELK+Filebeat+Docker,都知道分布式爬虫系统是由一个高可用的控制中心配合多个弹性工作节点组成,假定我们现在把各个工作节点封装成Docker镜像,那么我们通过监控Docker容器的状态来监控爬虫系统了。

作者: Lateautumn4lin来源:云爬虫技术研究笔记

前言

很多读者也咨询过我怎么去监控爬虫系统的日志?这里我们给出一个通用的轻量级监控系统架构方式---ELK+Filebeat+Docker,都知道分布式爬虫系统是由一个高可用的控制中心配合多个弹性工作节点组成,假定我们现在把各个工作节点封装成Docker镜像,那么我们通过监控Docker容器的状态来监控爬虫系统了。

使用docker搭建elk
1、使用docker-compose文件构建elk。文件如下:

version: '3'
services:
elk:

image: sebp/elk:640
ports:
  - "5601:5601"
  - "9200:9200"
  - "5044:5044"
environment:
  - ES_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
  - ~dockerdata/elk:/var/lib/elasticsearch

2、执行docker-compose up -d 启动elk。可以使用docker logs 命令查看elk启动日志。启动成功后打开浏览器访问 http://127.0.0.1:5601

filebeat安装与配置
关于filebeat本文也不做过多介绍。只讲解安装与配置。
1、filebeat的docker-composep

version: '3'
services:
filebeat:

image: prima/filebeat:6
#restart: always
volumes:
  - ./config/filebeat.yml:/filebeat.yml
  - ~/dockerdata/filebeat:/data
  - /var/lib/docker/containers:/var/lib/docker/containers

挂载说明

filebeat.yml配置需要在本地有对应文件,稍后会说到
filebeat抓取日志进度数据,挂载到本地,防止filebeat容器重启,所有日志重新抓取
因为要收集docker容器的日志,所以要挂在到docker日志存储目录,使它有读取权限
2、filebeat配置文件设置

在docker-compose.yml同级目录新建config文件夹
在config文件下新建filebeat.yml文件,文件内容如下:
filebeat.prospectors:

  • type: log
    enabled: true

paths:

- /var/lib/docker/containers/*/*.log #需要读取日志的目录#

json.keys_under_root: true # 因为docker使用的log driver是json-file,因此采集到的日志格式是json格式,设置为true之后,filebeat会将日志进行json_decode处理
json.add_error_key: true #如果启用此设置,则在出现JSON解组错误或配置中定义了message_key但无法使用的情况下,Filebeat将添加“error.message”和“error.type:json”键。
json.message_key: log #一个可选的配置设置,用于指定应用行筛选和多行设置的JSON密钥。如果指定,键必须位于JSON对象的顶层,且与键关联的值必须是字符串,否则不会发生过滤或多行聚合。
tail_files: true
# 将error日志合并到一行
multiline.pattern: '^([0-9]{4}|[0-9]{2})-[0-9]{2}'
multiline.negate: true
multiline.match: after
multiline.timeout: 10s

registry_file: /opt/filebeat/registry

-------------------------- Elasticsearch output ------------------------------

直接输出到elasticsearch,这里的hosts是elk地址,端口号是elasticsearch端口

output.elasticsearch:
hosts: ["10.9.70.62:9200"]

==================== Elasticsearch template setting ==========================

setup.template.name: "filebeat.template.json"
setup.template.fields: "filebeat.template.json"
setup.template.overwrite: true
setup.template.enabled: false

过滤掉一些不必要字段

processors:

  • drop_fields:

    fields: ["input_type", "offset", "stream", "beat"]

    在config文件下新建filebeat.template.json文件,文件内容如下:

{
"mappings": {

"_default_": {
  "_all": {
    "norms": false
  },
  "_meta": {
    "version": "5.1.2"
  },
  "dynamic_templates": [
    {
      "strings_as_keyword": {
        "mapping": {
          "ignore_above": 1024,
          "type": "keyword"
        },
        "match_mapping_type": "string"
      }
    }
  ],
  "properties": {
    "@timestamp": {
      "type": "date"
    },
    "beat": {
      "properties": {
        "hostname": {
          "ignore_above": 1024,
          "type": "keyword"
        },
        "name": {
          "ignore_above": 1024,
          "type": "keyword"
        },
        "version": {
          "ignore_above": 1024,
          "type": "keyword"
        }
      }
    },
    "input_type": {
      "ignore_above": 1024,
      "type": "keyword"
    },
    "message": {
      "norms": false,
      "type": "text"
    },
    "meta": {
      "properties": {
        "cloud": {
          "properties": {
            "availability_zone": {
              "ignore_above": 1024,
              "type": "keyword"
            },
            "instance_id": {
              "ignore_above": 1024,
              "type": "keyword"
            },
            "machine_type": {
              "ignore_above": 1024,
              "type": "keyword"
            },
            "project_id": {
              "ignore_above": 1024,
              "type": "keyword"
            },
            "provider": {
              "ignore_above": 1024,
              "type": "keyword"
            },
            "region": {
              "ignore_above": 1024,
              "type": "keyword"
            }
          }
        }
      }
    },
    "offset": {
      "type": "long"
    },
    "source": {
      "ignore_above": 1024,
      "type": "keyword"
    },
    "tags": {
      "ignore_above": 1024,
      "type": "keyword"
    },
    "type": {
      "ignore_above": 1024,
      "type": "keyword"
    }
  }
}

},
"order": 0,
"settings": {

"index.refresh_interval": "5s"

},
"template": "filebeat-*"
}
执行docker-compose up -d 启动filebeat。
在需要抓取docker日志的所有主机上按照以上步骤安装运行filebeat即可。到这一步其实就已经可以在elk里面建立索引查抓取到的日志。但是如果docker容器很多的话,没有办法区分日志具体是来自哪个容器,所以为了能够在elk里区分日志来源,需要在具体的docker容器上做一些配置,接着看下面的内容

docker容器设置
可以给具体的docker容器增加labels,并且设置logging。参考以下docker-compose.yml

version: '3'
services:
db:

image: mysql:5.7
# 设置labels
labels:
  service: db
# logging设置增加labels.service
logging:
  options:
    labels: "service"
ports:
  - "3306:3306"

重新启动应用,然后访问http://127.0.0.1:5601 重新添加索引。查看日志,可以增加过滤条件 attrs.service:db,此时查看到的日志就全部来自db容器。结果如下图所示:

号主介绍

前两年在二线大厂工作,目前在创业公司搬砖

接触方向是爬虫和云原生架构方面

有丰富的反爬攻克经验以及云原生二次开发经验

其他诸如数据分析、黑客增长也有所涉猎

做过百余人的商业分享以及多次开办培训课程

目前也是CSDN博客专家和华为云享专家

往期精彩回顾

震惊 | 只需3分钟!极速部署个人Docker云平台

深入理解Python的TLS机制和Threading.local()

我为什么不建议你使用Python3.7.3?

下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

公众号内回复“私藏资料”即可领取爬虫高级逆向教学视频以及多平台的中文数据集

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
616 1
|
7月前
|
存储 JSON 监控
日志分析:内网监控系统数据与ELK堆栈
日志分析一直是信息技术领域中至关重要的一项任务。随着互联网的不断发展,组织和企业积累了大量的数据,而其中很大一部分是日志数据。这些日志数据包含了系统的运行状态、事件发生记录以及性能指标,为了更好地理解和管理这些数据,ELK堆栈(Elasticsearch、Logstash和Kibana)成为了一种非常强大的工具。本文将探讨如何使用ELK堆栈进行内网监控系统数据的分析,同时提供一些代码示例来演示其功能和用法。
247 0
|
9月前
|
数据采集 开发者 Python
如何利用日志记录与分析处理Python爬虫中的状态码超时问题
如何利用日志记录与分析处理Python爬虫中的状态码超时问题
|
数据采集 Python
Python爬虫:scrapy框架log日志设置
Python爬虫:scrapy框架log日志设置
426 0
|
存储 监控 Devops
go| go并发实战: 搭配 influxdb + grafana 高性能实时日志监控系统
go| go并发实战: 搭配 influxdb + grafana 高性能实时日志监控系统
760 0
|
监控 数据安全/隐私保护 安全
|
数据采集 监控 应用服务中间件
[译] 在 Apache 和 Nginx 日志里检测爬虫机器人
本文讲的是[译] 在 Apache 和 Nginx 日志里检测爬虫机器人,现在阻止基于 JavaScript 追踪的浏览器插件享有九位数的用户量,从这一事实可以看出,web 流量日志可以成为一个很好的、能够感知有多少人在访问你的网站的地方。
1777 0
|
运维 监控 前端开发
ELK前端日志分析、监控系统
前端日志与后端日志不同,具有很强的自定义特性,不像后端的接口日志、服务器日志格式比较固定,大部分成熟的后端框架都有非常完善的日志系统,借助一些分析框架,就可以实现日志的监控与分析,这也是运维工作的一部分。
5187 0
|
Android开发 Python
LogBoy 之Android Studio控制台输出日志太多清空
在使用Android studio的时候,有时候会由于手机输出的日志太多,导致控制台瞬间清空,尤其是遇见一些FATAL Exception时候,瞬间控制台就被清空了,根本捕获不到,导致其他调试的日志也被清空。
1173 0