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.rhkb.cn/news/328279.html

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

相关文章

【MySQL】表的增删改查 | CRUD | 新增 | 查询 | 修改 | 删除 | 数据库约束

文章目录 表的增删改查一、CRUD1.新增(Create)1.插入多行2.指定列多行插入3.插入datetime类型4.插入当前时间5.插入查询的结果 2.查询(Retrieve)1.全列查询 *2.指定列查询3.查询字段为表达式4.指定别名 as5.去重 distinct6.排序 o…

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

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

WPF之DataGird应用

1,DataGrid相关属性 GridLinesVisibility:DataGrid网格线是否显示或者显示的方式。HorizontalGridLinesBrush:水平网格线画刷。VerticalGridLinesBrush:垂直网格线画刷。HorizontalScrollBarVisibility:水平滚动条可见…

SOLIDWORKS 2024云服务新功能

一、简单的分享一下,在线观看,轻松标记 在达索系统SOLIDWORKS 2024云服务中,您只需在达索系统SOLIDWORKS中点击按钮,就可以将当前的设计分享给其他人,无论是客户、供应商还是团队内部成员。共享的用户只要打开浏览器里…

C++:编程世界的永恒之石

在编程的广袤领域中,C犹如一块永恒的基石,历经岁月的洗礼,依旧坚固而璀璨。它的深厚底蕴、强大功能和广泛的应用领域,使其成为无数程序员心中的信仰与追求。 一、C:历史与传承的交汇点 C的历史可追溯到上世纪80年代&…

详解JS的URL()和URLSearchParams() API接口

两个 API 接口定义 URL() 构造函数返回一个新创建的 URL 对象,表示由一组参数定义的 URL。 URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。 快速了解两个 API 在哪里用 以前我们要对地址栏中的 URL 地址进行分析处理,需要自己进…

Redis如何避免数据丢失?——AOF

目录 AOF日志 1. 持久化——命令写入到AOF文件 写到用户缓冲区 AOF的触发入口函数——propagate 具体的实现逻辑——feedAppendOnlyFile 从用户缓冲区写入到AOF文件(磁盘) 函数write、fsync、fdatasync Redis的线程池 AOF文件的同步策略 触发的入口函数——…

NSSCTF Web方向的例题和相关知识点(二)

[SWPUCTF 2021 新生赛]Do_you_know_http 解题: 点击打开环境,是 提示说请使用wLLm浏览器访问 我们可以更改浏览器信息,在burp重放器中发包后发现是302重定向,但是提示说success成功,说明 我们修改是成功的&#xff…

20232803 2023-2024-2 《网络攻防实践》实践九报告

目录 1.实践内容2.实践过程2.1 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数2.2 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数2.3 注入一个自己制作的shellcode并运行…

GPU学习记一下线程分组相关

在compute的时候,是要dispatch一个数量的代表分了多少块任务集,dispatch的块内部也是有一个数量的,那么这些值怎么取的呢 内部,N卡32 外面dispatch的数量就是all/32 然后细说这个值 这有一个叫core的东西,就是相当于th…

【数据可视化-05】:Plotly数据可视化宝典

一、引言 数据可视化是机器学习流程中不可或缺的一部分。通过图形和图表展示数据,我们可以更直观地理解数据的分布、趋势和关联,从而更有效地进行数据分析、特征工程和模型评估。Plotly是一个功能强大且灵活的数据可视化库,它提供了丰富的图表…

Linux系统 -目录结构与配网

目录的特点 Windows中有C盘、D盘等,每个都是一个根系统是个多根系统 Linux中只有一个根是个单根系统 Linux-目录存储的内容 1、/root:管理员的家目录 2、/home:存储普通用户家目录的目录/3、/tmp:临时目录,这个目录存储…

合并K个升序链表

题目 解法一 优先级队列 思想 将每个链表中的一个节点存放到优先级队列中,本题采用小根堆,将小根堆中的根节点取出,插入到最终的链表中,并且将该节点在原链表中的下一个节点插入小根堆中(需要向下调整)&a…

Python查询和操作HTML文档库之pyquery使用详解

概要 在Web开发和数据抓取中,处理HTML文档是一项常见任务。Python的pyquery库提供了一个强大且灵活的方式来查询和操作HTML文档,类似于jQuery的语法。通过这篇文章,将深入了解pyquery的安装、特性、基本和高级功能,以及它在实际应用中的用例。 安装 安装pyquery相当简单,…

python:SunMoonTimeCalculator

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看: # 描述: https://github.com/Broham/suncalcPy # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2024/5/14 21:59 # User …

MQTT_服务器的安装_1.3

此例子是以Windows系统安装开源版本的EMQX 下载 EMQX 下载并解压 解压如图 进入bin 文件夹在文件目录中输入cmd回车 启动服务器 然后在cmd中输入下面的代码(会弹出一个访问网络的选项,确认可以访问网络) emqx start 结果如图(…

在Linux中安装Docker

如果之前安装过旧版本的 Docker,可以使用下面命令卸载: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine…

YOLO损失函数——SIoU和Focal Lossr损失函数解析

1. 概述 YOLO(You Only Look Once) 系列模型以其实时目标检测能力而闻名,其有效性在很大程度上归功于其专门设计的损失函数。在本文中,这里将深入探讨YOLO演进中不可或缺的各种YOLO损失函数,并重点介绍它们在PyTorch中…

免费泛域名证书申请

通配符证书是一种 SSL/TLS 证书,可用于保护多个域(主机),由域名字段中的通配符 (*) 指示。 如果您有很多需要保护的域或子域,这会很有帮助,因为它可以节省您的时间和金钱。 本文将讨论通配符证书、它们的工…

代码复现|Demucs Music Source Separation

一、背景介绍 Demucs是一个开源的音源分离项目。 Demucs在算法层面前后经历了三次大版本的进化,最原始的V1版本是:编解码LSTM。具体算法原理图如下所示。该版本在时域进行音源分离。关于阅读笔记请点击这篇文章。 V1版本原理图 V2版本是同时使用时域和频…