当前位置: 首页 > news >正文

K8S+Prometheus+Consul+alertWebhook实现全链路服务自动发现与监控、告警配置实战

系列文章目录

k8s服务注册到consul
prometheus监控标签


文章目录

  • 系列文章目录
  • 前言
  • 一、环境
  • 二、Prometheus部署
    • 1.下载
    • 2.部署
    • 3.验证
  • 三、kube-prometheus添加自定义监控项
    • 1.准备yaml文件
    • 2.创建新的secret并应用到prometheus
    • 3.将yaml文件应用到集群
    • 4.重启prometheus-k8s pod
    • 5.访问Prometheus-ui
  • 四、k8s中实践基于consul的服务发现
    • 1.示例nginx.yaml
    • 2.创建nginx pod
    • 3.检查Prometheus Targets中是否产生了对应的job_name
  • 五、告警链路启动
    • 1.修改alertmanager-secret.yaml文件
    • 2.启动alertWebhook pod
    • 3.测试能否收到告警
  • 总结


前言

在云原生技术蓬勃发展的今天,Kubernetes(K8S)已成为容器编排领域的事实标准,而监控作为保障系统稳定性和可观测性的核心环节,其重要性不言而喻。Prometheus 凭借其强大的时序数据采集能力和灵活的查询语言(PromQL),成为云原生监控体系的基石。然而,在动态变化的 K8S 环境中,传统静态配置的服务发现方式往往难以适应频繁的服务扩缩容和实例迁移。如何实现监控目标的自动化发现与动态管理,成为提升运维效率的关键挑战。

为此,服务发现技术应运而生。Consul 作为一款成熟的服务网格与分布式服务发现工具,能够实时感知 K8S 集群中服务的注册与健康状态,并与 Prometheus 无缝集成,为监控系统注入动态感知能力。这种组合不仅简化了配置复杂度,更让监控体系具备了“自愈”和“自适应”的云原生特性。

本文将以 实战为导向,深入剖析 K8S 环境下 Prometheus 与 Consul 的集成全流程、同时接入自研alertwebhook告警工具,涵盖以下核心内容:1、环境架构解析:从零搭建 K8S 集群,部署 Prometheus 与 Consul 的标准化方案;2、动态服务发现:通过 Consul 自动注册服务实例,实现 Prometheus 抓取目标的动态感知;3、配置优化实践:揭秘 Relabel 规则、抓取策略与告警规则的进阶调优技巧;4、故障排查指南:针对服务发现失效、指标抓取异常等场景,提供高效排查思路。5、告警通道配置:实现钉钉、邮箱、企业微信三个告警通知渠道。

整体架构图如下所示
在这里插入图片描述

一、环境

一套最小配置的k8s1.28集群
pod自动注册到consul <具体可看顶部文章>
在这里插入图片描述

二、Prometheus部署

1.下载

代码如下(示例):

[root@k8s-master ~]# git clone https://github.com/prometheus-operator/kube-prometheus.git
[root@k8s-master ~]# cd kube-prometheus

2.部署

[root@k8s-master ~]# kubectl apply --server-side -f manifests/setup
[root@k8s-master ~]# until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
[root@k8s-master ~]# kubectl apply -f manifests/

3.验证

部署成功后,结果如下(如果部署失败,可手动想办法更换镜像地址
在这里插入图片描述

三、kube-prometheus添加自定义监控项

1.准备yaml文件

代码如下(示例):

[root@k8s-master prometheus]# cat prometheus-additional.yaml - job_name: 'consul-k8s' #自定义scrape_interval: 10sconsul_sd_configs:- server: 'consul-server.middleware.svc.cluster.local:8500' #consul节点的ip和svc暴露出的端口token: "9bfbe81f-2648-4673-af14-d13e0a170050" #consul的acl tokenrelabel_configs:# 1. 保留包含 "container" 标签的服务- source_labels: [__meta_consul_tags]regex: .*container.*action: keep# 2. 设置抓取地址为服务的 ip:port- source_labels: [__meta_consul_service_address]target_label: __address__replacement: "$1:9113" #9113是nginx-exporter的端口,如果有修改自行替换# 3. 其他标签映射(具体的consul标签根据自己的实际环境替换,如果你使用的是顶部文章中的consul注册工具,可以不用修改)#具体可看顶部文章prometheus监控标签进行学习理解- source_labels: [__meta_consul_service_address]target_label: ip- source_labels: [__meta_consul_service_metadata_podPort]target_label: port- source_labels: [__meta_consul_service_metadata_project]target_label: project- source_labels: [__meta_consul_service_metadata_monitorType]target_label: monitorType- source_labels: [__meta_consul_service_metadata_hostNode]target_label: hostNode

2.创建新的secret并应用到prometheus

# 创建secret
[root@k8s-master prometheus]# kubectl create secret generic additional-scrape-configs -n monitoring --from-file=prometheus-additional.yaml --dry-run=client -o yaml > ./additional-scrape-configs.yaml# 应用到prometheus
[root@k8s-master prometheus]# kubectl apply -f additional-scrape-configs.yaml -n monitoring[root@k8s-master prometheus]# kubectl get secrets -n monitoring 
NAME                           TYPE     DATA   AGE
additional-scrape-configs      Opaque   1      3h18m

3.将yaml文件应用到集群

添加以下配置到文件中

[root@k8s-master prometheus]# vim manifests/prometheus-prometheus.yaml
......additionalScrapeConfigs:name: additional-scrape-configs #必须跟上述secret名称一致key: prometheus-additional.yaml.......#应用变更到K8S生效
[root@k8s-master prometheus]# kubectl apply -f manifests/prometheus-prometheus.yaml -n monitoring

在这里插入图片描述

4.重启prometheus-k8s pod

[root@k8s-master prometheus]# kubectl rollout restart -n monitoring statefulset prometheus-k8s

5.访问Prometheus-ui

查看prometheus的target列表即可,或者prometheus–> Status–>Configuration 中可以搜到job_name为canal的配置信息
在这里插入图片描述

四、k8s中实践基于consul的服务发现

准备一个nginx.yaml,结合consul的自动注册镜像,将其注册到consul,然后结合所配置的consul服务发现进行pod监控
在这里插入图片描述

1.示例nginx.yaml

通过配置nginx自带的stub_status模块和nginx-exporter暴露的9113端口,实现对nginx进行监控,使其Prometheus能从http://pod Ip:9113/metrics获取到监控数据

[root@k8s-master consul]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: nginxname: nginxnamespace: middleware
spec:replicas: 1selector:matchLabels:run: nginxstrategy:rollingUpdate:maxSurge: 1maxUnavailable: 0type: RollingUpdatetemplate:metadata:labels:run: nginxspec:tolerations:- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"initContainers:- name: service-registrarimage: harbor.jdicity.local/registry/pod_registry:v14env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: CONSUL_IPvalueFrom:configMapKeyRef:name: global-configkey: CONSUL_IP- name: ACL_TOKENvalueFrom:secretKeyRef:name: acl-tokenkey: ACL_TOKEN- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeNamevolumeMounts:- mountPath: /shared-bin  # 共享卷挂载到 initContainername: shared-bincommand: ["sh", "-c"]args:- |cp /usr/local/bin/consulctl /shared-bin/ &&/usr/local/bin/consulctl register \"$CONSUL_IP" \"$ACL_TOKEN" \"80" \"容器监控" \"k8s"containers:- image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:stableenv:- name: CONSUL_IP  # 必须显式声明valueFrom:configMapKeyRef:name: global-configkey: CONSUL_IP- name: ACL_TOKEN  # 必须显式声明valueFrom:secretKeyRef:name: acl-tokenkey: ACL_TOKEN- name: CONSUL_NODE_NAMEvalue: "consul-0"- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.namelifecycle:preStop:exec:command: ["sh", "-c", "/usr/local/bin/consulctl deregister $CONSUL_IP $ACL_TOKEN 80 $CONSUL_NODE_NAME"]imagePullPolicy: IfNotPresentname: nginxvolumeMounts:- mountPath: /usr/local/bin/consulctl  # 挂载到 minio 容器的 PATH 目录name: shared-binsubPath: consulctl- name: nginx-configmountPath: /etc/nginx/nginx.confsubPath: nginx.conflivenessProbe:httpGet:path: /port: 80initialDelaySeconds: 3periodSeconds: 3ports:- containerPort: 80- name: nginx-exporter  # 容器名称image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx/nginx-prometheus-exporter:1.3.0args:- "--nginx.scrape-uri=http://localhost:80/stub_status"  # ? 使用新参数格式ports:- containerPort: 9113restartPolicy: AlwaysterminationGracePeriodSeconds: 30volumes:- name: shared-bin  # 共享卷emptyDir: {}- name: nginx-configconfigMap:name: nginx-config

configmap文件

[root@k8s-master consul]# cat nginx-config.yaml 
# nginx-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: nginx-confignamespace: middleware
data:nginx.conf: |user  nginx;worker_processes  auto;error_log  /var/log/nginx/error.log notice;pid        /var/run/nginx.pid;events {worker_connections  1024;}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;server {listen 80;location /stub_status {stub_status;allow 127.0.0.1;deny all;}location / {root   /usr/share/nginx/html;index  index.html index.htm;}}}

2.创建nginx pod

[root@k8s-master consul]# kubectl apply -f nginx-config.yaml 
[root@k8s-master consul]# kubectl apply -f nginx.yaml 

等待pod初始化容器启动后,会将其注册到consul,然后Prometheus通过配置的consul服务发现进行pod监控

3.检查Prometheus Targets中是否产生了对应的job_name

在这里插入图片描述
至此,Prometheus已能成功采集到对应的监控指标数据

五、告警链路启动

alertwebhook源码地址: https://gitee.com/wd_ops/alertmanager-webhook_v2
包含了源码、镜像构建、启动alertwebhook的yaml文件、告警实现架构图,再此不过多描述
在这里插入图片描述

1.修改alertmanager-secret.yaml文件

自己写的alertWebHook工具,实现了基于邮件、钉钉、企业微信三种方式的告警发送渠道

[root@k8s-master manifests]# cat alertmanager-secret.yaml 
apiVersion: v1
kind: Secret
metadata:name: alertmanager-mainnamespace: monitoring
stringData:alertmanager.yaml: |-global:resolve_timeout: 5mroute:group_by: ['alertname']group_interval: 10sgroup_wait: 10sreceiver: 'webhook'repeat_interval: 5mreceivers:- name: 'webhook'webhook_configs:- "url": "http://alertmanager-webhook.monitoring.svc.cluster.local:19093/api/v1/wechat"- "url": "http://alertmanager-webhook.monitoring.svc.cluster.local:19093/api/v1/email"- "url": "http://alertmanager-webhook.monitoring.svc.cluster.local:19093/api/v1/dingding"
type: Opaque[root@k8s-master manifests]# kubectl apply -f alertmanager-secret.yaml

2.启动alertWebhook pod

关于下方的邮件、钉钉、企业微信的key、secret等密钥自行百度官网文档获取,不过多描述

[root@k8s-master YamlTest]# cat alertWebhook.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: alertmanager-webhooknamespace: monitoring  # 建议根据实际需求选择命名空间labels:app: alertmanager-webhook
spec:replicas: 1selector:matchLabels:app: alertmanager-webhooktemplate:metadata:labels:app: alertmanager-webhookspec:containers:- name: webhookimage: harbor.jdicity.local/registry/alertmanager-webhook:v4.0imagePullPolicy: IfNotPresentports:- containerPort: 19093protocol: TCPresources:requests:memory: "256Mi"cpu: "50m"limits:memory: "512Mi"cpu: "100m"volumeMounts:- name: logsmountPath: /export/alertmanagerWebhook/logs- name: configmountPath: /export/alertmanagerWebhook/settings.yamlsubPath: settings.yamlvolumes:- name: logsemptyDir: {}- name: configconfigMap:name: alertmanager-webhook-config---
# 配置文件通过ConfigMap管理(推荐)
apiVersion: v1
kind: ConfigMap
metadata:name: alertmanager-webhook-confignamespace: monitoring
data:settings.yaml: |DingDing:enabled: falsedingdingKey: "9zzzzc39"signSecret: "SEzzzff859a7b"chatId: "chat3zz737e49beb9"atMobiles: - "14778987659"- "17657896784"QyWeChat:enabled: trueqywechatKey: "4249406zz305"corpID: "ww4zzz7b"corpSecret: "mM23zOozwEZM"atMobiles: - "14778987659"Email:enabled: truesmtp_host: "smtp.163.com"smtp_port: 25smtp_from: "rzzxd@163.com"smtp_password: "UzzH"smtp_to: "1zz030@qq.com"Redis:redisServer: "redis-master.redis.svc.cluster.local"mode: "master-slave"          # single/master-slave/clusterredisPort: "6379"            # 主节点端口redisPassword: "G0LzzW"requirePassword: true# 主从模式配置slaveNodes:- "redis-slave.redis.svc.cluster.local:6379"# 集群模式配置clusterNodes:- "192.168.75.128:7001"- "192.168.75.128:7002"- "192.168.75.128:7003"System:projectName: "测试项目"prometheus_addr: "prometheus-k8s.monitoring.svc.cluster.local:9090"host: 0.0.0.0port: 19093env: releaselogFileDir: /export/alertmanagerWebhook/logs/logFilePath: alertmanager-webhook.loglogMaxSize: 100logMaxBackup: 5logMaxDay: 30
---
# 新增 Service 配置
apiVersion: v1
kind: Service
metadata:name: alertmanager-webhooknamespace: monitoringlabels:app: alertmanager-webhook
spec:type: ClusterIP  # 默认类型,集群内访问selector:app: alertmanager-webhook  # 必须与 Deployment 的 Pod 标签匹配ports:- name: httpport: 19093      # Service 暴露的端口targetPort: 19093  # 对应容器的 containerPortprotocol: TCP

3.测试能否收到告警

当前k8s集群存在告警,看是否能收到告警通知
在这里插入图片描述
启动alertWebhook

[root@k8s-master YamlTest]# kubectl apply -f alertWebhook.yaml 
deployment.apps/alertmanager-webhook created
configmap/alertmanager-webhook-config created
service/alertmanager-webhook created

邮件部分日志示例
在这里插入图片描述

钉钉
在这里插入图片描述

企业微信
在这里插入图片描述
邮箱
在这里插入图片描述

该处使用的url网络请求的数据。


总结

至此一套完整的开源的监控注册、监控告警方案成功落地完成!!!

相关文章:

K8S+Prometheus+Consul+alertWebhook实现全链路服务自动发现与监控、告警配置实战

系列文章目录 k8s服务注册到consul prometheus监控标签 文章目录 系列文章目录前言一、环境二、Prometheus部署1.下载2.部署3.验证 三、kube-prometheus添加自定义监控项1.准备yaml文件2.创建新的secret并应用到prometheus3.将yaml文件应用到集群4.重启prometheus-k8s pod5.访…...

组件安全工程化革命:从防御体系构建到安全基因重塑

文章目录 总起&#xff1a;数字世界的钢铁长城 分论&#xff1a; 一、组件生态的"七宗罪"与安全基因重组 二、百万级流量下的安全工程化实战 三、性能与安全的共生进化论 四、安全工程化全链路解决方案 总束&#xff1a;安全基因驱动的未来图景 五、时代思考…...

(PC+WAP)大气滚屏网站模板 电气电力设备网站源码下载

源码介绍 (PCWAP)大气滚屏网站模板 电气电力设备网站源码下载。PbootCMS内核开发的网站模板&#xff0c;该模板适用于滚屏网站模板、电气电力设备网站源码等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;PCWAP&#xff0c…...

发送加密信息的简单实现【Java】

&#xff08;修改期&#xff09; 一、代码的引用处 public static SecretKeys generateKeys() throws NoSuchAlgorithmException {: 定义一个公共静态方法&#xff0c;用于生成 AES 和 HMAC 密钥对。 public static String encrypt(String plaintext, SecretKey aesKey, S…...

阿里云域名解析

一、打开域名控制台 PC端浏览器打开阿里云域名控制台:域名控制台,点击"域名解析"。 二、添加解析设置 选择需要解析的域名,点击"解析设置"。 点击"添加记录"。 添加@和www即可。...

DNS域名解析服务(正向 反向 主从)

DNS 1.分散式管理&#xff1a; Hosts文件 一改百度就不会访问了 Ip地址 域名 121&#xff0e;226.246.3 www.jd.com 2.我们会搭建一台 域名解析服务器全世界得域名全靠这台服务器进行解析 中央集权制 域名是由多个部分组成的 www.baidu.com .baidu .com是域…...

ROS2---std_msgs基础消息包

std_msgs 是ROS 2&#xff08;Robot Operating System 2&#xff09;里的基础消息包&#xff0c;它定义了一系列简单却常用的消息类型&#xff0c;为不同节点间的通信提供了基础的数据格式。 1. 消息包概述 std_msgs 包包含了多种基础消息类型&#xff0c;这些类型用于表示常…...

python基础:数据类型转换、运算符(算术运算符、比较运算符、逻辑运算符、三元运算符、位运算符)

目录 一、类型转换 隐式类型转换/自动转换&#xff1a; 显示类型转换/强制转换&#xff1a; 二、运算符 算数运算符&#xff1a; - * / 比较运算符 逻辑/布尔运算符 赋值运算符&#xff1a; 三元运算符 位运算符 [二进制] 运算符优先级 一、类型转换 python变量的类…...

[特殊字符] 终端效率提升指南:zsh + tmux

在日常开发中&#xff0c;一个舒适、高效的终端环境能显著提升工作效率。本文将介绍如何通过配置 oh-my-zsh 和 tmux 打造一个功能强大、便捷实用的终端工具集。无论你是 Linux 新手&#xff0c;还是资深开发者&#xff0c;都能从中获得实用的提升技巧。 &#x1f300; 一、终…...

【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

文件系统的魔法&#xff1a;让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块&#xff08;Super Bloc…...

MarkDown 输出表格的方法

MarkDown用来输出表格很简单&#xff0c;比Word手搓表格简单多了&#xff0c;而且方便修改。 MarkDown代码&#xff1a; |A|B|C|D| |:-|-:|:-:|-| |1|b|c|d| |2|b|c|d| |3|b|c|d| |4|b|c|d| |5|b|c|d|显示效果&#xff1a; ABCD1bcd2bcd3bcd4bcd5bcd A列强制左对齐&#xf…...

DOM解析XML:Java程序员的“乐高积木式“数据搭建

各位代码建筑师们&#xff01;今天我们要玩一个把XML变成内存乐高城堡的游戏——DOM解析&#xff01;和SAX那种"边看监控边破案"的刺激不同&#xff0c;DOM就像把整个乐高说明书一次性倒进大脑&#xff0c;然后慢慢拼装&#xff08;内存&#xff1a;你不要过来啊&…...

Python 数组里找出子超集

碰见一个问题&#xff0c;有一个大数组&#xff0c;如下所示&#xff1a; xx [[1, 3, 4], [3, 4, 5], [1, 2, 3, 4, 5], [6], [7, 8], [6, 7, 8]]大数组里面有好多小的数组&#xff0c;观察发现&#xff0c;小的数组其实有挺多别的小数组的子集&#xff0c;现在问题来了&…...

上层 Makefile 控制下层 Makefile ---- 第二部分(补充一些例子与细节)

1. 递归调用子目录 Makefile 通过 $(MAKE) -C 进入子目录并执行其 Makefile&#xff0c;这是最常见的分层构建方法。 示例&#xff1a;基本递归调用 目录结构&#xff1a; project/ ├── Makefile # 顶层 Makefile ├── lib/ │ ├── Makefile # 子目录…...

LeetCode算法题(Go语言实现)_44

题目 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份是一组直接或间接相连的城市&#xff0c;组内不含其他没有相连的城市。 给你…...

STM32 HAL库之USART示例代码

串口发送和接收以及回调函数都可在这个文件中查询&#xff1a;stm32f1xx_hal_uart.h 串口配置初始化代码main.c中&#xff1a;MX_USART1_UART_Init();&#xff0c;初始化 UART 高层参数&#xff08;波特率、数据位、停止位、校验、模式等&#xff09; void MX_USART1_UART_In…...

头歌educoder——数据库 第10-11章

第10章 1、 事务的&#xff08; &#xff09;特性要求事务必须被视为一个不可分割的最小工作单元 A、 原子性 B、 一致性 C、 隔离性 D、 持久性 2、 事务的&#xff08; &#xff09;特性要求一个事务在执行时&#xff0c;不会受到其他事务的影响。 A、 原子性 B、 一致性 C…...

从 Vue 到 React:深入理解 useState 的异步更新与函数式写法

目录 从 Vue 到 React&#xff1a;深入理解 useState 的异步更新与函数式写法1. Vue 的响应式回顾&#xff1a;每次赋值立即生效2. React 的状态更新是异步且批量的原因解析 3. 函数式更新&#xff1a;唯一的正确写法4. 对比 Vue vs React 状态更新5. React useState 的核心源码…...

如何实现元素随滚动平滑上升

#技术栈Vue3TypeScript# 相比大家没少见过这个的效果&#xff1a; 作为视觉效果是很不错的 同时实现也很简单&#xff0c;本质是封装一个Vue指令 1&#xff0c;创建指令文件 src / directives / vSlidenIn.ts import type { Directive } from vueconst vSlideIn: Directive …...

Nginx部署spa单页面的小bug

没部署过&#xff0c;都是给后端干的&#xff0c;自己尝试部署了一个下午终于成功了 我遇到的最大的bug是进入后只有首页正常显示 其他页面全是404&#xff0c;于是问问问才知道&#xff0c;需要这个 location / { try_files $uri $uri/ /index.html; } 让…...

关于全球化大规模混合云 Kubernetes Prometheus 监控体系标准化及 GitOps 自动化改进方案

背景 现状 某司概况&#xff1a; PaaS/SaaS 公司&#xff0c;业务面向全球&#xff0c;包括 东南亚/南亚/中东/欧洲/非洲/美洲/东亚…生产 k8s 集群数十套&#xff0c;生产非生产 >100 套(多种集群类型&#xff0c;各种公有云/专有云/私有云/数据中心…)疫情以来&#xff…...

力扣DAY51 | 热100 | 岛屿数量

前言 中等 √ 做得我元气大伤&#xff0c;超级naive方法&#xff0c;新开辟一个数组存岛屿编号&#xff0c;一个数组存岛屿上的点。 题目 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 …...

二叉树的最近公共祖先二叉搜索树的最近公共祖先

1 二叉树的最近公共祖先 学习&#xff1a; 代码 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:if root is None or root is p or root is q:return rootleft self.lowestCommonAncestor(root.left,p,q)right …...

关于 LLB 的问题

This error occurs when you’re trying to run a program or library that was compiled with GLIBC (GNU C Library) version 2.29, but your system has an older version of GLIBC installed. Solutions: 1. Upgrade your system’s GLIBC (Recommended if possible) Fo…...

kafka4.0浅尝辄止

最近工作中接触消息队列比较多&#xff0c;前几周又看到kafka4.0发布&#xff0c;故写一篇博客对消息队列做一个复盘。 目录 消息队列对比1. Apache Kafka 4.02. RabbitMQ3. RocketMQ4. ActiveMQ5. Apache Pulsar6. NSQ kafka4.0鲜明的新特性Java 版本要求升级API 更新与精简移…...

nmcli创建wpa-psk2 wifi热点

1. 创建新的WiFi连接&#xff1a; sudo nmcli connection add type wifi ifname wlan0 con-name WiFi名称 autoconnect yes ssid WiFi名称 2. 配置接入点模式和IP共享&#xff1a; sudo nmcli connection modify WiFi名称 802-11-wireless.mode ap 802-11-wireless.band …...

分布式日志治理:Log4j2自定义Appender写日志到RocketMQ

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【STM32单片机】#8 定时器编码器接口ADC模数转换器

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…...

dify部署,ollama部署,拉取模型,创建ai聊天应用

dify下载安装 dify1.0.1 windos安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.zip 链接: 百度网盘 请输入提取码 提取码: 1234 dify安装包 linux安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.tar.gz 链接: 百度网盘 请输入提取码 提取码…...

213、【图论】有向图的完全联通(Python)

题目描述 原题链接&#xff1a;105. 有向图的完全联通 代码实现 import collectionsn, k list(map(int, input().split())) adjacency collections.defaultdict(list) for _ in range(k):head, tail list(map(int, input().split()))adjacency[head].append(tail)visited_…...

Node.js中util模块详解

Node.js 中 util 模块全部 API 详解 一、类型检查函数 const util require(util);// 1. util.types // 检查对象类型 console.log(util.types.isDate(new Date())); // true console.log(util.types.isRegExp(/abc/)); // true console.log(util.types.isArrayBuffer(new …...

BasicTS:全面基准测试与异质性分析

BasicTS&#xff1a;全面基准测试与异质性分析 在当今数字化时代&#xff0c;多元时间序列&#xff08;Multivariate Time Series, MTS&#xff09;分析在众多领域发挥着关键作用&#xff0c;从交通管理到能源系统优化&#xff0c;都离不开对MTS的精准预测。然而&#xff0c;当…...

认识python全栈框架reflex:快速打造工具类网站、模型调用web应用

以下是对reflex的简单介绍&#xff1a; 纯Python编写的&#xff0c;高性能、可自定义的 Web 应用开发框架 网页开发内置组件生态完整&#xff0c;灵活使用、快速接入、快速部署支持路由页面&#xff0c;可以开发复杂系统、企业级系统&#xff0c;这方面优于gradio、streamlit…...

课题申报的立项依据方位指南:使用DeepSeek提高课题立项的关键

在竞争日益激烈的学术研究和科研项目申报环境中&#xff0c;立项依据作为课题申报书的灵魂部分&#xff0c;往往决定着一项研究能否获得评审专家的青睐和资助。 然而&#xff0c;许多研究者尽管学术能力突出&#xff0c;却在立项依据的撰写上显得力不从心&#xff0c;导致优质…...

蓝桥杯电子赛_E2PROM(AT24C02)

目录 一 前言 二 E2PROM的相关讲解 AT24C02的地址 PCF8591的地址 三 根据提供的iic写代码 相关可能会有疑问的地方&#xff1a; 1 三个入口参数&#xff0c;都有什么用&#xff1f; 2 为什么在写中&#xff0c;要用IIC_SendByte&#xff0c;在读中&#xff0c;要用IIC_R…...

Kubernetes服务注册到consul流程实践

文章目录 前言架构图示意一、环境准备二、consul部署1.yaml示例2.consul部署验证 三、consulctl工具实现1.核心功能2.注册到consul的标签及元数据3.consulctl工具使用示例 四、通过Dockerfile构建consulctl工具镜像五、Kubernetes集成方案六、 结果验证1.注册验证2.销毁验证 总…...

供应链业务-供应链全局观(三)- 供应链三流的集成

概述 供应链的全局观的全两篇文章主要描述了供应链的基础概念和供应链的协作和集成问题。 供应链业务-供应链全局观&#xff08;一&#xff09;定义了什么是供应链和供应链管理。 所谓供应链就是把采购进来的东西&#xff0c;通过自身的生成加工&#xff0c;进行增值服务&am…...

Docker 提示Docker Engine stopped

做AI开发的时候&#xff0c;安装Docker提示Docker Engine stopped&#xff0c;以下是解决步骤&#xff1a; 一般都是成功的&#xff0c;不成功很可能是电脑兼容问题&#xff0c;通过采用4.4.4版本解决的&#xff1a; docker desktop 4.4.4 旧版本下载&#xff1a;在这里找到了4…...

对自己的优缺点评价

在面试中回答优缺点时&#xff0c;需要既体现自我认知的客观性&#xff0c;又能将优缺点与岗位需求结合&#xff0c;避免暴露可能影响工作的硬伤。以下是一个符合Java开发者角色的回答框架&#xff0c;供参考&#xff1a; 回答思路&#xff1a; 优点&#xff1a;选择与岗位直接…...

解决eNSP在24H2版本下AR_40启动失败问题

前言 1.网络学习中缺少不了模拟&#xff0c;自从Windows版本更新24H2以后&#xff0c;eNSP就出现各种问题&#xff0c;最常见的就是AR报错40【启动失败】&#xff0c;之前我也去网站搜了&#xff0c;也问了Microsoft社区&#xff0c;发现他们在底层逻辑上进行了修改(开启了虚拟…...

计算机组成原理-指令系统

1. 指令系统的定义与作用 指令系统&#xff08;Instruction Set Architecture, ISA&#xff09;是计算机硬件与软件之间的接口规范&#xff0c;定义了CPU能够识别和执行的所有指令的集合&#xff0c;是计算机体系结构的核心组成部分。 核心作用&#xff1a; 为程序员提供操作…...

Oracle数据库中 LEVEL start with prior connect by

在Oracle数据库中&#xff0c;处理层次结构数据是一项常见且重要的任务。无论是组织结构、分类目录还是其他具有层级关系的数据&#xff0c;Oracle都提供了强大的工具来简化和优化这些操作。其中&#xff0c;LEVEL伪列结合CONNECT BY和START WITH关键字&#xff0c;成为了处理层…...

HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)

相较于HTTP 1.0&#xff0c;1.1 版本增加了以上特性&#xff1a; 1. 新增了连接管理即 keepalive&#xff0c;允许持久连接。 定义&#xff1a; Keepalive允许客户端和服务器在完成一次请求-响应后&#xff0c;保持连接处于打开状态&#xff0c;以便后续请求复用同一连接&am…...

Java学习手册:Java I/O与NIO

Java I/O&#xff08;Input/Output&#xff09;和NIO&#xff08;New Input/Output&#xff09;是Java语言中用于处理输入输出操作的重要部分。它们提供了丰富的API来处理文件和网络通信。I/O是Java早期版本中引入的&#xff0c;而NIO是在Java 1.4中引入的&#xff0c;旨在提供…...

linux下的目录文件管理和基本文件管理的基本操作

目录 1.目录创建&#xff0c;文件创建和文件编辑的案例 2.文件编辑进阶 --vim 3. 命令的别名 4. 查看文件内容和文件编辑(重定向)的案例 5. 重定向之追加 6. 查看目录和文件编辑的案例 7. 查看目录和文件编辑(覆盖)的案例 为了加深对linux命令的熟悉程度&#xff0c;这…...

magnet库Hello,world!

1.c文件 #include<iostream> #include"Control.hpp" class O1:public mag::Control{bool b; public:O1(){b1;}bool decide(){return b&&islifing();}void action(){std::cout<<"Hello,world!\n";b0;destroy();} }; int main(){O1 o1;…...

应急响应靶机-Linux(1)

挑战内容 账户密码&#xff1a;defend/defend Root/defend 黑客的IP地址遗留下的三个flag 1、按正常思路来走&#xff0c;先登录一手因已经给出root账户密码&#xff0c;先查看一手执行过的命令&#xff0c;发现一个flag值并且看到他往期编辑了一个文件&#xff0c;咱们顺便进去…...

k8s 部署spring项目+动态启动pod

在 Kubernetes 中部署 Spring Boot 项目并实现 动态管理 Pod&#xff08;自动扩缩容、滚动更新等&#xff09;&#xff0c;需要结合 Docker 镜像构建、Deployment 配置、Service 暴露和 HPA&#xff08;Horizontal Pod Autoscaler&#xff09; 等组件。以下是完整操作步骤&…...

【DINO】

detr 简化了检测流水线,消除了许多手工设置的组件 单阶段目标检测 需要前置的backbone抽取特征 faster_rcnn和yolo都是基于anchor,anchor当作候选框,NMS非极大值抑制 重叠的框只保存一个,效率低 所以detr来了,transformer,既有encoder又有decoder,套一个transforme…...

Nature重磅:后晶体管时代光子芯片革新AI计算!光子处理器运行《吃豆人》性能比肩电子,能效提升超500倍

随着人工智能&#xff08;AI&#xff09;模型规模以及应用范围的不断拓展&#xff0c;性能上限和能耗瓶颈正逐渐显现出来。大语言模型&#xff08;LLM&#xff09;、强化学习和卷积神经网络等 AI 模型的复杂性不断增长&#xff0c;正在将传统电子计算推向极限&#xff0c;能源需…...