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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 作者: 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答!!

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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
3月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
359 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
6月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
363 1
|
3月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
323 1
日志收集和Spring 微服务监控的最佳实践
|
3月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
122 4
|
3月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
294 2
|
8月前
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
513 89
|
5月前
|
数据采集 存储 监控
Python爬虫自动化:定时监控快手热门话题
Python爬虫自动化:定时监控快手热门话题
|
5月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
8月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
546 52