Go微服务: 日志系统ELK核心架构设计

微服务日志系统建设


1 )为什么需要日志系统

  • 业务发展越来越庞大,服务器越来越多
  • 各种访问日志,应用日志,错误日志量越来越多,无法管理
  • 开发人员排查问题,需要到服务器上查日志

2 )Elastic Stack

  • 它是 Elasticsearch, Logstash, Kibana, +Beats 组成的
  • Elasticsearch 是分布式搜索引擎,提供搜集,分析,存储数据三大功能
  • Logstash: 主要是用来日志的搜集,分析,过滤日志的工具
  • Kibana:提供友好的Web界面,可以汇总,分析和搜索数据
  • Beats: 是一个轻量级的日志收集处理工具 (Agent)

3 )Beats 的六种主要工具

  • Packetbeat: 网络数据(收集网络流量数据)
  • Metricbeat: 指标 (收集系统,进程和文件系统级别的数据)
  • Filebeat: 日志文件 (收集文件数据)
  • Winlogbeat: windows事件日志(收集Windows事件日志数据)
  • Auditbeat: 审计数据 (收集审计日志)
  • Heartbeat: 运行时间监控 (收集系统运行时的数据)

4 )ELK 系统的特点

  • 强大的收集能力:能够采集多种来源的日志数据
  • 稳定的传输能力: 能够把日志数据传输到中央系统
  • 分布式存储:可根据业务需求存储日志数据,可动态扩容
  • 分析&展示&提醒: 具备数据分析能力,数据展示能力和告警能力

5 )ELK 架构图

  • Fliebeat放到了一台机器上去,不同的机器
  • 不同的机器也可以放不同的Filebeat
  • Filebeat 即能直接传输到 Es 中去
  • 也可以通过 Logstash 处理完再传输到 Es 中
  • ES 负责存储我们的数据,也负责提供一些复杂的搜索
  • 通过存储和提供一些搜索能力,Kibana 可以通过Es的数据可以多维度的展示数据
  • 如果 Filebeat 和 es 中间压力比较大,还可以加一个 kafka

FileBeat


1 )基本组成

  • Prospector (勘测者) 负责管理 Harvester 并找到所有读取源
  • Harvester (收割机)负责读取单个文件内容,每个文件启动一个

2 )工作原理

  • 这里有2个 prospector
  • 上面一个 prospector 会给每个 log 文件建立一个 harvester, 负责文件内所有数据的上传
  • 下面一个 prospector 是监控 apache2目录下的 log 文件,同样的原理
  • 它会把上面日志文件的数据整理出来,发送到 es, logstash, kafka 或 redis 上

3 )Filebeat 如何记录文件状态

  • 文件状态记录在文件中 (默认在 /var/lib/filebeat/registry)
  • Filebeat 会记录发送前的最后一行,并再可以连接的时候继续发送
  • 每个Prospector 会为每个找到的文件记录一个状态
  • Filebeat 存储唯一标识符以检测文件是否先前被收集
  • 由此,可见,Filebeat是记录一系列的状态,来记录文件传输的过程

4 )Filebeat 如何保证事件至少被输出一次

  • Filebeat 将每个事件的传递状态保存在文件中
  • 在未得到输出方确认时,Filebeat 会尝试一直发送,直到得到回应
  • 任何在Filebeat 关闭之前未确认的事件,都会在 filebeat 重启之后重新发送
  • 可确保至少发送一次,但有可能会重复

5 )filebeat.yml 文件的配置样例

# Filebeat 输入
filebeat.inputs:
    # 类型
    - type: log
      enabled: true
      # 要抓取的文件路径
      paths:
        - ./*.log
# 输出 这里输出到 logstash, 也可输出到 es
output.logstash:
    # logstash 地址
    hosts: ["localhost: 5044"]

Logstash 工作原理

  • 主要是三个阶段:inputs -> filters -> outputs
    • 第一阶段是 Input 输入,会把数据输入到 logstash
    • 第二阶段是 Filters 过滤清洗
      • 数据中间处理,对数据进行操作, 它会有自己的插件
    • 第三阶段是 Outputs 数据输出
      • outputs 是 logstash 处理管道的最末端组件
      • 可以发送给es来存储和索引

1 )Logstash-Input 阶段常见的输入

  • file:从文件系统的文件中读取,类似于 tail -f 命令
  • syslog:在 514端口上监听系统日志消息,并根据RFC3164标准进行解析
  • beats:从 Filebeat 中读取

2 )Logstash-Input 常用样例

  • .conf 文件
    input {
        beats {
            port => 5044
        }
        tcp {
            port => 5000
        }
    }
    
    • beats 常用的 5044 是 Inputs 常用样例
    • 下面的 tcp 也可以不用写

3 )Logstash-Filter 数据中间件处理插件 grok (可解析任意文本数据)

  • Grok 基础语法,如: %{SYNTAX:SEMANTIC}
    • SYNTAX:代表匹配值的类型
    • SEMANTIC:代表存储该值的一个变量名称
  • %{ERROR|DEBUG|INFO|WARN: log_level}

4 )Logstash-Output 数据输出

  • 输出到 kafka 和 es 也可以输出到 redis
  • 输出到 es 样例
    output {
        elasticsearch {
            hosts => "elasticsearch: 9200"
            user => "elastic"
            password => "changeme"
            index => "%{[@metadata][-xxxxx]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
        }
    }
    

Docker-Compose 安装 ELK


1 )ELK docker-compose 编写

  • elasticsearch : 先拉镜像,再对配置进行修改
  • logstash:配置它的input和output
  • kibana: 搭建kibana平台, 有日志生成了, filebeat把程序log传到kibana
  • 现在编写代码,ELK 通过一个 docker-stack.yml 来进行管理
  • docker-stack.yml
    version: '3.3'
    services:
      elasticsearch:
        image: elasticsearch:7.9.3
        ports:
          - "9200:9200"
          - "9300:9300"
        volumes:
          - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        environment:
          ES_JAVA_OPTS: "-Xmx256m -Xms256m"
          ELASTIC_PASSWORD: xxxxxpwd
          discovery.type: single-node
          network.publish_host: _eth0_
      logstash:
        image: logstash:7.9.3
        ports:
          - "5044:5044"
          - "5000:5000"
          - "9600:9600"
        volumes:
          - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
          - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
        environment:
          LS_JAVA_OPTS: "-Xmx256m -Xms256m"
      kibana:
        image: kibana:7.9.3
        ports:
          - "5601:5601"
        volumes:
          - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    

2 ) 各类配置文件编写

  • elasticsearch/config/elasticsearch.yml
    ---
    cluster.name: "xxxxx-cluster"
    network.host: 0.0.0.0
    
    xpack.license.self_generated.type: trial
    xpack.security.enabled: true
    xpack.monitoring.collection.enabled: true
    
  • logstash/config/logstash.yml
    ---
    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]
    
    xpack.monitoring.enabled: true
    xpack.monitoring.elasticsearch.username: elastic
    xpack.monitoring.elasticsearch.password: xxxxxpwd
    
  • logstash/pipeline/logstash.conf
    input {
        beats {
            port => 5044
        }
        tcp {
            port => 5000
        }
    }
    
    output {
        elasticsearch {
            hosts => "elasticsearch:9200"
            user => "elastic"
            password => "xxxxxpwd"
            index => "%{[@metadata][-xxxxx]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
        }
    }
    
  • kibana/config/kibana.yml
    ---
    server.name: kibana
    server.host: 0.0.0.0
    elasticsearch.hosts: ["http://elasticsearch:9200"]
    monitoring.ui.container.elasticsearch.enabled: true
    
    elasticsearch.username: elastic
    elasticsearch.password: xxxxxpwd
    

3 ) 启动和检查

  • 启动:$ docker-compose -f docker-stack.yml up -d
  • 检查:$ docker-compose -f docker-stack.yml ps
    NAME                  IMAGE                 COMMAND                  SERVICE             CREATED              STATUS              PORTS
    elk-elasticsearch-1   elasticsearch:7.9.3   "/tini -- /usr/local…"   elasticsearch       About a minute ago   Up About a minute   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp
    elk-kibana-1          kibana:7.9.3          "/usr/local/bin/dumb…"   kibana              About a minute ago   Up About a minute   0.0.0.0:5601->5601/tcp
    elk-logstash-1        logstash:7.9.3        "/usr/local/bin/dock…"   logstash            About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp, 0.0.0.0:5044->5044/tcp, 0.0.0.0:9600->9600/tcp
    
  • 现在整个日志系统基本已经搭建完毕 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629748.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件系统和软硬连接

一、磁盘 磁盘可以存储大量的二进制数据,并且断电后也能保持数据不丢失。因此磁盘是一种永久性存储介质,在计算机中,磁盘是一个外设,也是唯一的机械设备。既然磁盘是一个外设,那么就意味着,磁盘和内存&…

Linux无root配置Node,安装nvm

1. 安装NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 或者,如果你使用wget wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 对于bash用户,可以运行&…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.6讲 GPIO中断实验-GPIO驱动添加中断处理函数

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)

1 漏洞概述 Weblogic Pre-Auth Remote Command Execution 漏洞(CVE-2020-14882, CVE-2020-14883)是针对 Oracle WebLogic Server 的两个安全漏洞。CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证,而 CVE-2020-14883 则允许经…

基于springboot+vue+Mysql的大学生社团活动平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Web应用开发中查找慢SQL的方法

每条SQL语句在执行时都需要消耗一定的I/O资源,SQL语句执行的快慢直接决定了硬件资源被占用时长的长短,慢SQL一般指查询很慢的SQL语句。在MySQL数据库中,可以通过慢查询来查看所有执行超时的SQL语句。在默认情况下,一般慢SQL是关闭…

基于NIOS-II软核流水灯和串口通信实现

文章目录 一、创建工程二、系统设计1. 在 “component library” 标签栏中找到 “Nios II Processor” 后点击 Add2. 在 ”Component Library” 标签栏中的查找窗口输入 jtag 找到 ”JTAG UART ”,然后点击 Add3. 添加片上存储器 On-Chip Memory(RAM)核4. 查找窗口输…

Keil手动安装编译器V5版本

V5编译器下载:免积分下载 新版的keil不会自动帮你安装V5版本的编译器,但是很多教程很多比赛所用单片机都是V5的编译器,所以用来开以前的或者开源的很多东西编译直接一大堆报错。 吐槽说完了接下来教你怎么解决 打开installer(在…

springboot+vue+mybatis物业管理系统+PPT+论文+讲解+售后

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,通过线上物业管理系统也就相继涌现。与此同时,人们开始接受方便的生活…

软件压力测试怎么做

随着信息技术的迅猛发展,软件在各行各业的应用越来越广泛,其稳定性、可靠性和性能表现也受到了越来越多的关注。在这样的背景下,软件压力测试显得尤为重要。本文将详细介绍软件压力测试的概念、目的、方法以及实施步骤,帮助读者更…

「JavaEE」多线程案例1:单例模式阻塞队列

🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 多线程案例分析 🍉单例模式🍌饿汉模式🍌懒汉模式🍌指令重排序 🍉阻塞队列&a…

eMMC和SD模式速率介绍

概述 在实际项目开发中我们常见的问题是有人会问,“当前项目eMMC、SD所使用模式是什么? 速率是多少?”。这些和eMMC、SD的协议中要求的,要符合协议。接下来整理几张图来介绍。 eMMC 模式介绍 一般情况下我们项目中都是会支持到HS400 8bit 1.8V,最大时钟频率为200MHZ,通…

Idea入门:一分钟创建一个Java工程

一,新建一个Java工程 1,启动Idea后,选择 [New Project] 2,完善工程信息 填写工程名称,根据实际用途取有意义的英文名称选择Java语言,可以看到还支持Kotlin、Javascript等语言选择包管理和项目构建工具Mav…

十款开源数据集成工具

在大数据作业开发中,数据集成工具是非常重要的一个环节,一个好的数据集成系统从可用性、架构扩展性、底层引擎选型、数据源支持能力等方面都需要一定的考量,在本文中汇总了十款开源的数据集成系统,作者本人在过往的开发过程中&…

【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础 要了解docker网络,先了解如下基础概念。 Network Namespace Docker 网络的底层原理是 Linux 的 Network Namespace ,所以对于 Linux Network Namespace 的理解对 Docker 网络底层原理的理解非常重要。 简介 Network Name…

LeetCode328奇偶链表

题目描述 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 (1)Express定义: Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

DDoS防护的市场需求将不断增长,DDoS高防IP显得各位重要

分布式拒绝服务(DDoS)攻击是一种恶意攻击,它借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的为例。DDoS攻击通过大量合法的请求占用大…

19个测试⽤例⽣成的AI⼯具!卷起来!

在不断发展的软件开发领域中,确保应⽤程序的可靠性和功能性⾄关重要。 随着软件系统复杂性的增加,有效测试⽅法的需求也在上升。 传统的测试⽤例⽣成⽅法通常⽆法满⾜快速开发周期和复杂代码库的需求。 随着进⼊⼈⼯智能(AI)时…

treejs 3D+echart实现三维旋转炫酷导航网页

treejs 3Dechart实现三维旋转炫酷导航网页https://www.bilibili.com/video/BV1SM4m1C7ki/