【微服务部署】06-日志集成

文章目录

    • 1. EFK日志三件套集成
      • 1.1 核心组件
      • 1.2 部署
    • 2. Exceptionless日志系统
      • 2.1 Exceptionless核心特性
      • 2.2 Exceptionless部署文件
      • 2.3 K8s中使用Exceptionless

1. EFK日志三件套集成

1.1 核心组件

  • Elasticsearch(存储)
  • Fluentd(收集器)
  • Kibana(数据看板)

在这里插入图片描述

每个Kubernetes节点上可以运行一个Fluentd实例,这个实例会去收集所有Pod打印出来的日志流。Fluentd可以做到无侵入的收集日志;
多个Kubernetes节点组成了Kubernetes集群,每个Fluentd收集到的日志都推送到Elasticsearch中。Elasticsearch可以单独部署,也可以部署在Kuberbetes集群中;
Kibana负责管理Elasticsearch,并作为数据看板

1.2 部署

需要部署Elasticsearch、Fluentd、Kibana

Elasticsearch

apiVersion: apps/v1beta1
kind: Deployment
metadata:name: elasticsearchnamespace: defaultlabels:tag: elasticsearch
spec:replicas: 1template:metadata:labels:app: elasticsearchspec:containers:- name: elasticsearchimage: "elasticsearch:7.5.2"imagePullPolicy: IfNotPresentenv:- name: discovery.typevalue: "single-node"volumeMounts:- mountPath: "/usr/share/elasticsearch/data"name: elasticsearch-storageports:- containerPort: 9200- containerPort: 9300resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 100mmemory: 512MiterminationGracePeriodSeconds: 10volumes:- name: elasticsearch-storagehostPath:path: "/d/k8s/volumes/elasticsearch/data"type: DirectoryOrCreaterestartPolicy: Always--- apiVersion: v1
kind: Service
metadata:name: elasticsearchnamespace: defaultlabels:tag: "elasticsearch"
spec:type: NodePortports:- nodePort: 30007port: 9200targetPort: 9200name: "9200"protocol: TCP- nodePort: 30008port: 9300targetPort: 9300name: "9300"protocol: TCPselector:app: elasticsearch

Fluentd

apiVersion: apps/v1beta1
kind: Deployment
metadata:name: fluentdnamespace: defaultlabels:tag: fluentd
spec:replicas: 1template:metadata:labels:app: fluentdspec:containers:- name: fluentdimage: "witskeeper/fluentd-es:68"imagePullPolicy: IfNotPresentenv:- name: discovery.typevalue: "single-node"volumeMounts:- mountPath: "/fluentd/etc/fluent.conf"name: fluentd-configsubPath: fluent.conf- mountPath: "/var/log"name: containers-logs- mountPath: "/var/lib/docker/containers"name: docker-logsports:- containerPort: 24224resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 100mmemory: 512MiterminationGracePeriodSeconds: 10volumes:- name: fluentd-configconfigMap:name: fluentd-config- name: containers-logshostPath:path: "/var/log"type: DirectoryOrCreate- name: docker-logshostPath:path: /var/lib/docker/containersrestartPolicy: Always--- apiVersion: v1
kind: Service
metadata:name: fluentdnamespace: defaultlabels:tag: "fluentd"
spec:type: NodePortports:- nodePort: 30011port: 24224targetPort: 24224protocol: TCPselector:app: fluentd

Kibana

apiVersion: apps/v1beta1
kind: Deployment
metadata:name: kibananamespace: defaultlabels:tag: kibana
spec:replicas: 1template:metadata:labels:app: kibanaspec:containers:- name: kibanaimage: "kibana:6.8.6"imagePullPolicy: IfNotPresentenv:- name: discovery.typevalue: "single-node"- name: XPACK_MONITORING_ENABLEDvalue: "true"ports:- containerPort: 5601resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 100mmemory: 512MiterminationGracePeriodSeconds: 10restartPolicy: Always--- apiVersion: v1
kind: Service
metadata:name: kibananamespace: defaultlabels:tag: "kibana"
spec:type: NodePortports:- nodePort: 30009port: 5601targetPort: 5601protocol: TCPselector:app: kibana

2. Exceptionless日志系统

2.1 Exceptionless核心特性

  • 友好的界面
  • 内置日志分类看板
  • 按团队和项目管理应用
  • 支持Web hook发送异常通知
  • 基于.Net Core开源

在这里插入图片描述

Exceptionless由UI、Job、Api三个镜像组成。背后依赖了Redis存储和文件存储;
文件存储是用来存储应用提交的日志文件,然后通过Job将这些文件推送到Elasticsearch中,用户可以通过UI和Api从dashboard上查询异常日志;
应用程序通过Api推送异常日志

2.2 Exceptionless部署文件

apiVersion: apps/v1beta1
kind: Deployment
metadata:name: exceptionless-apinamespace: defaultlabels:tag: exceptionless-api
spec:replicas: 1template:metadata:labels:app: exceptionless-apispec:containers:- name: exceptionless-apiimage: "exceptionless/api:6.0.0"imagePullPolicy: IfNotPresentenv:- name: EX_AppModevalue: "Production"- name: EX_BaseURLvalue: http://localhost:30013- name: EX_ConnectionStrings__Cachevalue: provider=redis- name: EX_ConnectionStrings__Elasticsearchvalue: server=http://elasticsearch:9200;enable-size-plugin=false#- name: EX_ConnectionStrings__Email#  value: smtps://user:password@smtp.host.com:587- name: EX_ConnectionStrings__MessageBusvalue: provider=redis- name: EX_ConnectionStrings__Queuevalue: provider=redis- name: EX_ConnectionStrings__Redisvalue: server=redis,abortConnect=false- name: EX_ConnectionStrings__Storagevalue: provider=folder;path=/app/storage- name: EX_RunJobsInProcessvalue: 'false'volumeMounts:- mountPath: "/app/storage"name: exceptionless-storageports:- containerPort: 80resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 100mmemory: 128MiterminationGracePeriodSeconds: 10volumes:- name: exceptionless-storagehostPath:path: "/d/k8s/volumes/exceptionless" // 本地存储目录type: DirectoryOrCreaterestartPolicy: Always---apiVersion: v1
kind: Service
metadata:name: exceptionless-apinamespace: defaultlabels:tag: "exceptionless-api"
spec:type: NodePortports:- nodePort: 30012port: 80targetPort: 80protocol: TCPselector:app: exceptionless-api---apiVersion: apps/v1beta1
kind: Deployment
metadata:name: exceptionless-jobnamespace: defaultlabels:tag: exceptionless-job
spec:replicas: 1template:metadata:labels:app: exceptionless-jobspec:containers:- name: exceptionless-jobimage: "exceptionless/job:6.0.0"imagePullPolicy: IfNotPresentenv:- name: EX_AppModevalue: "Production"- name: EX_BaseURLvalue: http://localhost:30013- name: EX_ConnectionStrings__Cachevalue: provider=redis- name: EX_ConnectionStrings__Elasticsearchvalue: server=http://elasticsearch:9200;enable-size-plugin=false#- name: EX_ConnectionStrings__Email#  value: smtps://user:password@smtp.host.com:587- name: EX_ConnectionStrings__MessageBusvalue: provider=redis- name: EX_ConnectionStrings__Queuevalue: provider=redis- name: EX_ConnectionStrings__Redisvalue: server=redis,abortConnect=false- name: EX_ConnectionStrings__Storagevalue: provider=folder;path=/app/storage- name: EX_RunJobsInProcessvalue: 'false'volumeMounts:- mountPath: "/app/storage"name: exceptionless-job-storageports:- containerPort: 80resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 100mmemory: 128MiterminationGracePeriodSeconds: 10volumes:- name: exceptionless-job-storagehostPath:path: "/d/k8s/volumes/exceptionless"type: DirectoryOrCreaterestartPolicy: Always---apiVersion: v1
kind: Service
metadata:name: exceptionless-jobnamespace: defaultlabels:tag: "exceptionless-job"
spec:type: NodePortports:- nodePort: 30014port: 80targetPort: 80protocol: TCP---
apiVersion: apps/v1beta1
kind: Deployment
metadata:name: exceptionless-uinamespace: defaultlabels:tag: exceptionless-ui
spec:replicas: 1template:metadata:labels:app: exceptionless-uispec:containers:- name: exceptionless-uiimage: "exceptionless/ui:2.8.1497"imagePullPolicy: IfNotPresentenv:- name: AppModevalue: "Production"- name: EX_ApiUrlvalue: http://localhost:30012ports:- containerPort: 80resources:limits:cpu: 1000mmemory: 2048Mirequests:cpu: 100mmemory: 128MiterminationGracePeriodSeconds: 10restartPolicy: Always---apiVersion: v1
kind: Service
metadata:name: exceptionless-uinamespace: defaultlabels:tag: "exceptionless-ui"
spec:type: NodePortports:- nodePort: 30013port: 80targetPort: 80protocol: TCPselector:app: exceptionless-ui
// Program
public static int Main(string[] args)
{Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration).MinimumLevel.Debug().Enrich.FromLogContext().WriteTo.Console(new RenderedCompactJsonFormatter())//.WriteTo.Fluentd("localhost", 30011, tag: "geektime-ordering-api", restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug).CreateLogger();// 将Configuration中的exceptionless读取出来,并绑定到它默认的配置上去Configuration.GetSection("exceptionless").Bind(Exceptionless.ExceptionlessClient.Default.Configuration);try{Log.Information("Starting web host");CreateHostBuilder(args).Build().Run();return 0;}catch (Exception ex){Log.Fatal(ex, "Host terminated unexpectedly");return 1;}finally{Log.CloseAndFlush();}
}// 配置文件
"exceptionless": {"ApiKey": "PSaokqmXC8T4xgWal9I0atA8TlYG7Ytz65JvxAL3","ServerUrl": "http://localhost:30012"},// startup
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{app.UseExceptionless();// 放在所有中间件最前面.为了能捕获到所有异常
}

2.3 K8s中使用Exceptionless

配置文件

 "exceptionless": {"ApiKey": "PSaokqmXC8T4xgWal9I0atA8TlYG7Ytz65JvxAL3" // 需要是当前项目的秘钥},

因为serverUrl地址是共享的,地址被配置在env.txt中

要将配置引用进来,需要在deployment.yaml中注册serverUrl为环境变量

通过EFK收集应用的全量日志,Exceptionless收集异常日志

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

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

相关文章

W5100S-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章节我们用我们开发板在UDP组播模式下进行数据回环测试,本章我们用开发板去主动ping主机IP地址来检测与该主机之间网络的连通性。 什么是PING? PING是一种命令, 是用来探测主机到主机之间是否可通信,如果不能ping到某台…

LeetCodeHot100python版本:单调栈,栈,队列,堆

单调栈 739. 每日温度 42. 接雨水 双指针 单调栈(横向求解) ​​​​​​84. 柱状图中最大的矩形 栈和队列 队列:先入先出 栈:先入后出 两个栈 模拟 队列 一个队列 可以模拟 栈 20. 有效的括号 ​​​​​​155. 最小栈 394. 字符串解码 堆 215. 数组中的第K个最大元素 (…

李宏毅机器学习课程笔记(更新ing)

CNN 为什么AlphaGo可以用CNN?棋盘抽象成图片时需要注意什么? 首先图片有两个特点: 1,只观察局部就可以显示某种pattern,比如要得出一个鸟嘴的结论,只需要观察局部图片 2,某种pattern可以出现在图…

STM32 Cubemx 同名外设中断及回调

文章目录 前言示例工程个人理解 前言 最近在学习STM32,采用HAL库开发方式。记录一下同名外设中断及回调。 这里提及的同名外设指USART1/2之类的相同外设,但不是同一个instance。 示例工程 以使用cubemx配置两个同名外设EXTI0/EXT4为例。 在NVIC配置…

JS三座大山 —— 原型和原型链

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、原型是什么?二、原型链是什么?2.1 原型链全方面解析2.2 为什么构造函数也有原型? 总结 前言 理解原型和原型链可以帮助我们更好地理解 Java…

传统分拣弊端明显,AI机器视觉赋能物流行业包裹分类产线数智化升级

随着电子商务的快速发展,物流行业的包裹数量持续增长,给物流企业带来了巨大的运营压力。目前,国内大型物流运转中心已开始采用机器视觉自动化设备,但多数快递公司处于半自动化状态,中小型物流分拣中心目前仍靠人工录入…

每日一题——旋转图像

旋转图像 题目链接 方法一:利用辅助数组 通过对示例的观察和分析,我们可以得到这样的结论: 对于原数组的下标为i行元素,顺时针旋转九十度后,都变成了下标为(n-1-i)列元素。如图所示&#xff…

代替forever下一个部署node的持久化工具---pm2

最近有个后端项目,用的是node,在持久化的时候会挂掉,详细了解到用的是nohup,然后先详细了解了一下nohup nohup是一个Linux命令,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行1nohup的英文全称…

基于RabbitMQ的模拟消息队列需求文档

文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列? 消息队列就是,基于阻塞队列,封装成一个独立的服务器程序&#…

Nginx百科之gzip压缩、黑白名单、防盗链、零拷贝、跨域、双机热备

引言 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业…

three.js渲染带动画的glb文件

1. 准备工作 将下列文件在three.js的包中找到,注意的是我这里使用的是模块化版本的,这里不知道模块化的,可以先去看一下es6的模块化。 控制器: OrbitControls.js 加载器:GLTFLoader.js 材质: RoomEnvironm…

golang字符串转Uint16

switch params[index].ParameType {case 10: //10数值(Byte)params[index].ParameByte []byte{byte(xtools.InterfaceToInt(params[index].ParameValue))}case 15: //15Bytesparams[index].ParameByte, _ hex.DecodeString(params[index].ParameValue)case 20: //20ASCIIpara…

数据时代的必备利器:数据可视化工具的崭新价值

在当今信息时代,数据扮演着越来越重要的角色,而数据的可视化呈现正是一种强大的工具,能够帮助我们更好地理解和利用这些数据。虽然Excel和PPT在处理数据方面有着不可否认的作用,但在处理大规模、复杂数据时,数据可视化…

微信小程序 基于Android的美容理发师预约管理系统

,本系统主要根据管理员、用户及理发师的实际需要,方便用户利用互联网实现对商品信息进行立即订购,同时让管理者可以通过这个系统对用户实际需求以及各信息进行管理。设计该系统主要目的是为了方便用户、理发师可以有一个非常好的平台体验&…

文心一言 VS 讯飞星火 VS chatgpt (84)-- 算法导论8.2 1题

一、用go语言,参照图8-2 的方法,说明 COUNTING-SORT 在数组 A(6,0,2,0,1,3,4,6,1,3,2)上的操作过程。 文心一言: Counti…

Spring retry(二)- 源码解析-启动装配篇 @EnableRetry

上一篇文章,我们快速介绍了下spring-retry的使用技巧,本篇我们将会剖析源码去学习 一、 EnableRetry注解 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) EnableAspectJAutoProxy(proxyTargetClass false) Import(RetryConfiguration.c…

现货黄金走势图中的止盈点

对平仓时机的把握能力,是衡量现货黄金投资者水平的重要标志,止盈点设置得是否合理,在行情兑现的时候能否及时地离场,是事关投资者账户浮盈最终能否落袋为安的“头等大事”,要在现货黄金走势图中把握止盈点,…

Linux-安装redis6.2.1及主备复制模式(replication)

Linux-安装redis6.2.1 下载redis6.2.1资源上传至安装目录解压及编译解压修改名称编译 修改配置文件主节点从节点 启动及测试启动主节点从节点 测试 下载redis6.2.1资源 地址》https://redis.io/download/ 上传至安装目录 例:/data/replication/ 解压及编译 解…

网络编辑的选择能力

以往的网络编辑给人的印象就是个信息搬运工,日常的工作就是从合作媒 体的网站上拷贝新闻,然后粘贴在发布系统中,唯一做的有点儿创造性的工作就是 根据字数要求做一个吸引人的标题就行了。这样的工作还谈不上具备媒介素养,因 为…

【kubernetes系列】Calico原理及配置

概述 Calico是针对容器,虚拟机和基于主机的本机工作负载的开源网络和网络安全解决方案。 Calico支持广泛的平台,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸机服务。 Calico在每个计算节点都利用Linux Kernel实…