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: logenabled: 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.3ports:- "9200:9200"- "9300:9300"volumes:- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.ymlenvironment:ES_JAVA_OPTS: "-Xmx256m -Xms256m"ELASTIC_PASSWORD: xxxxxpwddiscovery.type: single-nodenetwork.publish_host: _eth0_logstash:image: logstash:7.9.3ports:- "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.confenvironment:LS_JAVA_OPTS: "-Xmx256m -Xms256m"kibana:image: kibana:7.9.3ports:- "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.0xpack.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: trueelasticsearch.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
    
  • 现在整个日志系统基本已经搭建完毕 ~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBean详解

文章目录 概述Spring获取Bean的流程依赖注入bean的作用域Spring 中的 Bean 是线程安全的吗Spring如何处理线程并发问题bean 的自动装配和方式Resource和Autowired的区别bean的自动装配bean的生命周期BeanFactoryBeanFactory 常用的实现类有哪些BeanFactory与FactoryBean的不同A…

惠普打印机无线网络连接设置

休息一下,灌个水。这次没多少内容,具体步骤惠普官网上都有,唯一增加的是对安装过程中踩的坑做了一个说明。 一.打印机无线网络连接设置步骤 惠普打印机设置无线网络连接,共16个步骤。 1. 在电脑上打开任意浏览器&am…

HAProxy系列文章二《Patroni+ETCD+PG14+HAProxy的安装部署》

瀚高数据库 目录 文档用途 详细信息 文档用途 本文主要介绍Patroni架构下单点HAProxy的安装部署,通过单点HAProxy实现数据库的负载均衡。本文为HAProxy系列文章之一,其他相关文章请点击文档下方的相关文档链接进行详细查看,文章内不在赘述。…

Spring MVC(四) 数据校验

在开发过程中有一环必不可少的部分就是数据校验,用户在页面中填写的数据通过表单提交时,前端的JS可以做一些是否合法性的验证,比如是否为空、两次密码是否一致、格式是否正确等等验证。当数据到了后台控制器,为了确保程序的健壮性…

Python专家编程系列: 11.为什么在python使用__name__ == ‘__main__‘

0. 标题 Python专家编程系列: 11.为什么在python使用__name__ ‘main’ id: 104 作者: quantgalaxyoutlook.com 欢迎交流 1. 单个 python 文件中的 __name__ 是什么? 我们先看一个简单的python程序脚本a.py: # a.pyprint(__name__) # python a.py # _…

最直接解决 element + sortablejs 拖拽后顺序错误

直接按索引对调两行对象,免加row-key const oldRow this.valueMy[evt.oldIndex] this.valueMy[evt.oldIndex] this.valueMy[evt.newIndex] this.valueMy[evt.newIndex] oldRow

内网环境ubuntu设置静态ip、DNS、路由,不影响网络访问

内网环境通常是有线的,通过服务器的ip、mac、dns地址访问网络才生效的,如果ip地址变了,就不能访问网络了。 如果你的ip地址变了,或者要防止ip变更影响网络访问,就要设置 1、依次点击右上角的电源-设置,在打…

linux 正则表达式+文本三剑客

一、正则表达式 1.正则表达式的概念 REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通…

公司里的“卷王”,是主动卷还是迫于无奈?

先来唠唠 “卷” 这个词是近几年流行起来的网络用语,它是内卷的简化形式,“内卷”本来是一个名不见经传的普通词语,经网络流传,很多人就用其来指代非理性的内部竞争或“被自愿”竞争。 在现代职场,有一群人被戏称为&…

《大学数学3(第三版)》

文章目录 [toc]第一章:行列式第一节|方程组与行列式二元线性方程组和二阶行列式 第二节| n n n阶行列式排列逆序数对换例题 1 1 1 n n n阶行列式 第三节|行列式的性质和计算性质 1 1 1性质 2 2 2:互换 n n n阶行列式的任意两行(列&#xff09…

机器学习算法那些事 | 60个“特征工程”计算函数(Python代码)

本文来源公众号“机器学习算法那些事”,仅用于学术分享,侵权删,干货满满。 原文链接:60个“特征工程”计算函数(Python代码) 近期一些朋友询问我关于如何做特征工程的问题,有没有什么适合初学…

【无标题】进程池/Linux

#include <iostream> #include <vector> #include <unistd.h> #include <cassert> #include <sys/types.h> #include <string> #include <sys/wait.h> // using namespace std; #include "Tash.hpp" class channel//封装文…

三分钟快速上手SpringSecurity框架

导入依赖框架 web 框架(spring-boot-starter-web) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> springSecurity 框架(spring-boot-starter-security) <de…

递归-常规问题详解

目录 前言 递归经典题目 子集 77. 组合 46. 全排列 前言 递归在计算机算法中有很重要的地位&#xff0c;它可以解决条件具有重复性的问题。我们在快速排序和归并排序&#xff0c;都是利用了递归去解决问题的。写好一个递归代码不是太容易&#xff0c;很容易造成死循环最终…

基于单片机的空气质量检测系统设计(51+4G版)-设计说明书

设计摘要&#xff1a; 本设计是基于单片机的空气质量检测系统设计涉及以下主要功能&#xff0c;旨在监测甲烷和一氧化碳的浓度&#xff0c;并在浓度过高时采取相应措施&#xff0c;以确保室内空气质量的安全。该系统使用传感器对甲烷和一氧化碳的浓度进行检测。传感器将收集到…

人物介绍模板 PSD 源文件免费获取

免费获取 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1sq3e6djMdZt76Sh_uqVxWg 提取码&#xff1a;naun

AniPortrait详细讲解以及完整搭建流程(有问题留言)

AniPortrait是一款真实感人像动画的音频驱动合成的AI程序。 下面是它的github源码: GitHub - Zejun-Yang/AniPortrait: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait AnimationAniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animati…

TiDB学习1:TiDB体系架构概览

目录 1. TiDB体系结构 2. TiDBsever 3. TiKV 4. PD(Placement Driver) 5. TiFlash 1. TiDB体系结构 水平扩容或者缩容金融级高可用实时 HTAP云原生的分布式数据库兼容MySQ 5.7 协议 2. TiDBsever 处理客户端的连接SQL语句的解析和编译关系型数据与 kv 的转化(insert语句)S…

线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?

随着科技的飞速发展&#xff0c;传统的博物馆参观方式正在经历一场前所未有的变革&#xff0c;在科技的“加持”下&#xff0c;不少博物馆凭借强大的技术、创意和美学实践&#xff0c;频频“出圈”&#xff0c;线上3D博物馆逐渐崛起&#xff0c;这不仅丰富了人们的文化体验&…

Mirror从入门到入神(二)

文章目录 SpawnSpawnObject NetworkIdentityAwakeInitializeNetworkBehavioursValidateComponents NetworkBehaviourNetworkServerSpawnObjectOnStartServerRebuildObserversRebuildObserversDefaultAddAllReadyServerConnectionsToObservers NetworkIdentityAddObserver Netwo…