日志集中管理

在我工作第三个月的时候,夥伴们觉得除错的方式能不能有所改善,於是有提出 EFK 架构,也就是 Elasticsearch 加 Fluent Bit 和 Kibana。Elasticsearch 简单使用单节点而已毕竟量还不会到很大,Fluent Bit 是一个满轻量化的解析器。

Elasticsearch 特点

  • 分散式的即时文件储存,每个字段都可被索引并可搜索
  • 分散式即时分析搜索引擎
  • 不规则查询
  • 高扩展,可处里 PB 级结构或非结构化数据
  • Lucene 实现索引和搜索功能
  • 透过简单的 RESTful API 来隐藏 Lucene 的复杂性,让搜索变简单

ES 能做什麽

  • 全文检索
  • 模糊查询
  • 数据分析
  • 聚合等

Elasticsearch 的交互方式

  • 基於 HTTP 协定,以 JSON 为数据交互格式的 RESTful API

Fluentd Bit

  • log processor tool

在数据来源不段增加下它有以下特性

  • 不同的信息来源
  • 不同的数据格式
  • 数据可靠性
  • 安全
  • 灵活的路由
  • 多个目的地

使用 docker-compose 建置服务,以下是 ES 和 kibana 还有一个 cerebro 它可用来管理 Elasticsearch。

version: '3.6'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION} 
    container_name: elasticsearch 
    volumes:
      - type: bind
        source: ./elasticsearch/config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch_pv
        target: /usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
    restart: unless-stopped
    environment:
      ES_JAVA_OPTS: "-Xms1024m -Xms1024m"
    networks:
      - efk
    deploy:
      resources:
        limits:
          memory: 2048m
        reservations:
          memory: 1024m

  cerebro:
    image: yannart/cerebro
    container_name: cerebro
    ports:
      - "9000:9000"
    restart: unless-stopped
    networks:
      - efk
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:${ELK_VERSION}
    container_name: kibana
    volumes:
      - type: bind
        source: ./kibana/config/
        target: /usr/share/kibana/config
        read_only: true
    ports:
      - "5601:5601"
    restart: unless-stopped
    networks:
      - efk
    depends_on:
      - elasticsearch

networks:
  efk:
    driver: bridge

volumes:
  elasticsearch_pv: {}
# ./elasticsearch/config/elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node
bootstrap.memory_lock: true
# ./kibana/config/kibana.yml
server.port: 5601
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]

Fluent Bit 可以做为机器的代理服务,每建立一台服务就安装它。如下

version: '3.7'
services:
  fluent-bit:
    image: fluent/fluent-bit:1.7.0
    container_name: fluent-bit
    volumes:
      - type: bind
        source: ./fluent/conf/socket
        target: /fluent-bit/etc
        read_only: true
# IF use read file
#      - type: bind
#        source: /var/lib/docker/containers
#        target: /fluentd/log/containers
    ports:
      - 24224:24224
      - 24224:24224/udp
      - 2020:2020
    deploy:
      resources:
        limits:
          cpus: '0.05'
          memory: 60M
        reservations:
          cpus: '0.005'
          memory: 10M

明天会介绍一下 Fluentd Bit,之後会带范例


<<:  [02] [Flask 快速上手笔记] 01. 建立开发环境

>>:  Day3 — 前导:电晶体如何组成逻辑闸

[Day 08] 简单的单元测试实作(二)

接下来我们做第二个测试,我们传入一个数字, 譬如说我们传入4, 因为它是4的倍数, 所以应该是闰年,...

[Day4][笔记] React JSX

前言 开始前我们先直接上一段程序码 const element = <div style= {...

Day10 - 物理模拟篇 - 弹跳球世界I - 成为Canvas Ninja ~ 理解2D渲染的精髓

作为物理模拟开场的第一进程,当然就要来讲一下最经典的物理模拟案例:『弹跳球』~ 其实很多国外的Can...

Day03 测试写起乃 - 安装Rspec

安装 Rspec 在安装 Rspec 之前我们先产生一个 Rails 6的新专案到 Gemfile ...

[区块链&DAPP介绍 Day6] Solidity 教学 - reference types

昨天看完value types,今天来聊聊 reference types。 solidity 的 ...