Prometheus Alertmanager告警之邮件、钉钉群、企业微信群机器人报警

文章目录

  • 一、部署alertmanager相关组件
    • 1.alertmanager-config
    • 2.alertmanager-message-tmpl
    • 3.alertmanager
  • 二、调试邮件告警
  • 三、钉钉群/企业微信群 报警
    • 3.1添加钉钉群机器人
    • 3.2添加企业微信群机器人
    • 3.3部署alertmanager-webhook-adapter
      • message-tmpl
      • alertmanager-webhook-adapter
      • alertmanager-config
    • 3.4钉钉群报警信息效果
    • 3.5企业微信群报警信息效果
  • 总结


Prometheus报警功能利用Alertmanager组件完成,Prometheus会对接收的指标数据比对告警规则,如果满足条件,则将告警时间发送给Alertmanager组件,Alertmanager组件发送到接收人
使用步骤:

  1. 部署Alertmanager
  2. 配置告警接收人
  3. 配置Prometheus与Alertmanager通信
  4. 在Prometheus中创建告警规则
    在这里插入图片描述

一、部署alertmanager相关组件

1.alertmanager-config

#alertmanager-config.yaml主配置文件,主要配置altermanager的告警配置

apiVersion: v1
kind: ConfigMap
metadata:name: alertmanager-confignamespace: ops
data:alertmanager.yml: |global:#恢复告警等待时间,如果5m没收到来自prometheus的告警 则发送恢复告警通知resolve_timeout: 5m#邮箱服务器smtp_smarthost: 'smtp.exmail.qq.com:465'#发送告警的邮箱地址smtp_from: 'fanxxxxuai@cxxxxne.com'#发送者的邮箱登陆用户名smtp_auth_username: 'fanxxxxuai@cxxxxne.com'#发送者的邮箱授权吗(若是企业微信邮箱的话为发送者的登陆邮箱密码)smtp_auth_password: '123456'#关闭tls,默认是开启tls的,若不关闭则会报错,错误为本篇总结出所示smtp_require_tls: false#alertmanager告警消息的模版templates:- '/etc/alertmanager/msg-tmpl/*.tmpl'#主路由route: #指定告警接收者receiver: 'mail-receiver'#分组(通过alertname标签的值分组)group_by: [cluster, alertname]#第一次产生告警,等待30s,足内有告警的话就一起发出,没有则单独发group_wait: 30s#第二次产生告警,先等待5m,如果5m后还没有恢复就进入repeat_interval。(定义相同的Group之间发送告警通知的时间间隔)group_interval: 5m#在最终发送消息前再等待30m,30m后还没恢复就发送第二次告警repeat_interval: 30m##所以每次告警之间的间隔时间为35m(group_interval+repeat_interval)#配置告警接受者receivers:- name: 'mail-receiver'#使用邮件接收email_configs:- to: 'fanxxxxuai@cxxxxne.com'send_resolved: truehtml: '{{ template "emailMessage" . }}'

2.alertmanager-message-tmpl

#alertmanager-message-tmpl.yaml 告警模版(邮件)

apiVersion: v1
kind: ConfigMap
metadata:name: alertmanager-message-tmplnamespace: ops
data:email.tmpl: |{{ define "emailMessage" }}{{- if gt (len .Alerts.Firing) 0 -}}{{- range $index, $alert := .Alerts -}}{{- if eq $index 0 }}------ 告警问题 ------<br>告警状态:{{ .Status }}<br>告警级别:{{ .Labels.severity }}<br>告警名称:{{ .Labels.alertname }}<br>故障实例:{{ .Labels.instance }}<br>告警概要:{{ .Annotations.summary }}<br>告警详情:{{ .Annotations.description }}<br>故障时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>------ END ------<br>{{- end }}{{- end }}{{- end }}{{- if gt (len .Alerts.Resolved) 0 -}}{{- range $index, $alert := .Alerts -}}{{- if eq $index 0 }}------ 告警恢复 ------<br>告警状态:{{ .Status }}<br>告警级别:{{ .Labels.severity }}<br>告警名称:{{ .Labels.alertname }}<br>恢复实例:{{ .Labels.instance }}<br>告警概要:{{ .Annotations.summary }}<br>告警详情:{{ .Annotations.description }}<br>故障时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>------ END ------<br>{{- end }}{{- end }}{{- end }}{{- end }}

3.alertmanager

#alertmanager.yaml 部署altermanager

apiVersion: apps/v1
kind: Deployment
metadata:name: alertmanagernamespace: ops
spec:replicas: 1selector:matchLabels:app: alertmanagertemplate:metadata:labels:app: alertmanagerspec:containers:#用于热加载配置文件- name: prometheus-alertmanager-configmap-reloadimage: "jimmidyson/configmap-reload:v0.1"imagePullPolicy: "IfNotPresent"args:- --volume-dir=/etc/config- --webhook-url=http://localhost:9093/-/reloadvolumeMounts:- name: configmountPath: /etc/configreadOnly: trueresources:limits:cpu: 10mmemory: 10Mirequests:cpu: 10mmemory: 10Mi- name: alertmanagerimage: "prom/alertmanager:latest"ports:- containerPort: 9093readinessProbe:httpGet:path: /#/statusport: 9093initialDelaySeconds: 30timeoutSeconds: 30livenessProbe:httpGet:path: /#/statusport: 9093initialDelaySeconds: 30timeoutSeconds: 30resources:requests:cpu: 100mmemory: 256Milimits:cpu: 500mmemory: 512MivolumeMounts:- name: configmountPath: /etc/alertmanager- name: message-tmpl mountPath: /etc/alertmanager/msg-tmpl- name: datamountPath: /data- name: timezonemountPath: /etc/localtimevolumes:- name: configconfigMap:name: alertmanager-config- name: message-tmplconfigMap:name: alertmanager-message-tmpl- name: datapersistentVolumeClaim:claimName: alertmanager-data- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: alertmanager-datanamespace: ops
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadWriteOnceresources:requests:storage: "2Gi"
---
apiVersion: v1
kind: Service
metadata:name: alertmanagernamespace: ops
spec:type: NodePortports:- name: httpport: 9093protocol: TCPtargetPort: 9093nodePort: 30093selector:app: alertmanager

部署完成后访问 IP:30093即可访问altermanager的web展示界面
在这里插入图片描述



二、调试邮件告警

此时可以尝试重启一个pod进行调试
将资源配额调至超出可申请资源 让其为pending状态 如下:
test-alertmanager.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80resources:requests:memory: "24Gi"cpu: "12000m"limits:memory: "24Gi"cpu: "12000m"

启动此Pod观察
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

邮件告警如下:
在这里插入图片描述



三、钉钉群/企业微信群 报警

(webhook自定义机器人类型即可)

目前prometheus没有集成钉钉群和企业微信群接口,需要自己写webhook(数据转换)或者用别人写的
例如:https://github.com/bougou/alertmanager-webhook-adapter
在这里插入图片描述

3.1添加钉钉群机器人

在这里插入图片描述

创建完成后会有一个webhook地址,稍后会使用到此webhook的token
在这里插入图片描述



3.2添加企业微信群机器人

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建完成后会有一个webhook地址,稍后会使用到此webhook的key
在这里插入图片描述


3.3部署alertmanager-webhook-adapter

message-tmpl

#message-tmpl.yaml告警模版我把钉钉的和企业微信的放一起了
模版来源于:https://github.com/bougou/alertmanager-webhook-adapter/tree/main/pkg/models/templates

apiVersion: v1
kind: ConfigMap
metadata:name: message-tmplnamespace: ops
data:
####################################################################################################################dingding.tmpl: |{{ define "__subject" -}}【{{ .Signature }}】{{- if eq (index .Alerts 0).Labels.severity "ok" }} OK{{ end }}{{- if eq (index .Alerts 0).Labels.severity "info" }} INFO{{ end }}{{- if eq (index .Alerts 0).Labels.severity "warning" }} WARNING{{ end }}{{- if eq (index .Alerts 0).Labels.severity "error" }} ERROR{{ end }}{{- ` • ` }}{{- if .CommonLabels.alertname_cn }}{{ .CommonLabels.alertname_cn }}{{ else if .CommonLabels.alertname_custom }}{{ .CommonLabels.alertname_custom }}{{ else if .CommonAnnotations.alertname  }}{{ .CommonAnnotations.alertname }}{{ else }}{{ .GroupLabels.alertname }}{{ end }}{{- ` • ` }}{{- if gt (.Alerts.Firing|len) 0 }}告警中:{{ .Alerts.Firing|len }}{{ end }}{{- if and (gt (.Alerts.Firing|len) 0) (gt (.Alerts.Resolved|len) 0) }}/{{ end }}{{- if gt (.Alerts.Resolved|len) 0 }}已恢复:{{ .Alerts.Resolved|len }}{{ end }}{{ end }}{{ define "__externalURL" -}}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{- end }}{{ define "__alertinstance" -}}{{- if ne .Labels.alertinstance nil -}}{{ .Labels.alertinstance }}{{- else if ne .Labels.instance nil -}}{{ .Labels.instance }}{{- else if ne .Labels.node nil -}}{{ .Labels.node }}{{- else if ne .Labels.nodename nil -}}{{ .Labels.nodename }}{{- else if ne .Labels.host nil -}}{{ .Labels.host }}{{- else if ne .Labels.hostname nil -}}{{ .Labels.hostname }}{{- else if ne .Labels.ip nil -}}{{ .Labels.ip }}{{- end -}}{{- end }}{{ define "__alert_list" }}{{ range . }}---> **告警名称**: {{ if .Labels.alertname_cn  }}{{ .Labels.alertname_cn }}{{ else if .Labels.alertname_custom  }}{{ .Labels.alertname_custom }}{{ else if .Annotations.alertname  }}{{ .Annotations.alertname }}{{ else }}{{ .Labels.alertname }}{{ end }}>> **告警级别**: {{ ` ` }}{{- if eq .Labels.severity "ok" }}OK{{ end -}}{{- if eq .Labels.severity "info" }}INFO{{ end -}}{{- if eq .Labels.severity "warning" }}WARNING{{ end -}}{{- if eq .Labels.severity "error" }}ERROR{{ end }}>> **告警实例**: `{{ template "__alertinstance" . }}`>{{- if .Labels.region }}> **地域**: {{ .Labels.region }}>{{- end }}{{- if .Labels.zone }}> **可用区**: {{ .Labels.zone }}>{{- end }}{{- if .Labels.product }}> **产品**: {{ .Labels.product }}>{{- end }}{{- if .Labels.component  }}> **组件**: {{ .Labels.component }}>{{- end }}> **告警状态**: {{ if eq .Status "firing" }}🚨{{ else }}{{ end }} {{ .Status | toUpper }}>> **开始时间**: {{ .StartsAt.Format "2006-01-02T15:04:05Z07:00" }}>> **结束时间**: {{ if .EndsAt.After .StartsAt }}{{ .EndsAt.Format "2006-01-02T15:04:05Z07:00" }}{{ else }}Not End{{ end }}>{{- if eq .Status "firing" }}> 告警描述: {{ if .Annotations.description_cn }}{{ .Annotations.description_cn }}{{ else }}{{ .Annotations.description }}{{ end }}>{{- end }}{{ end }}{{ end }}{{ define "__alert_summary" }}{{ range . }}- {{ template "__alertinstance" . }}{{ end }}{{ end }}{{ define "prom.title" }}{{ template "__subject" . }}{{ end }}{{ define "prom.markdown" }}{{ .MessageAt.Format "2006-01-02T15:04:05Z07:00" }}#### **摘要**{{ if gt (.Alerts.Firing|len ) 0 }}##### **🚨 触发中告警 [{{ .Alerts.Firing|len }}]**{{ template "__alert_summary" .Alerts.Firing }}{{ end }}{{ if gt (.Alerts.Resolved|len) 0 }}##### **✅ 已恢复告警 [{{ .Alerts.Resolved|len }}]**{{ template "__alert_summary" .Alerts.Resolved }}{{ end }}#### **详请**{{ if gt (.Alerts.Firing|len ) 0 }}##### **🚨 触发中告警 [{{ .Alerts.Firing|len }}]**{{ template "__alert_list" .Alerts.Firing }}{{ end }}{{ if gt (.Alerts.Resolved|len) 0 }}##### **✅ 已恢复告警 [{{ .Alerts.Resolved|len }}]**{{ template "__alert_list" .Alerts.Resolved }}{{ end }}{{ end }}{{ define "prom.text" }}{{ template "prom.markdown" . }}{{ end }}####################################################################################################################wechat.tmpl: | {{ define "__subject" -}}【{{ .Signature }}】{{- if eq (index .Alerts 0).Labels.severity "ok" }} OK{{ end }}{{- if eq (index .Alerts 0).Labels.severity "info" }} INFO{{ end }}{{- if eq (index .Alerts 0).Labels.severity "warning" }} WARNING{{ end }}{{- if eq (index .Alerts 0).Labels.severity "error" }} ERROR{{ end }}{{- ` • ` }}{{- if .CommonLabels.alertname_cn }}{{ .CommonLabels.alertname_cn }}{{ else if .CommonLabels.alertname_custom }}{{ .CommonLabels.alertname_custom }}{{ else if .CommonAnnotations.alertname  }}{{ .CommonAnnotations.alertname }}{{ else }}{{ .GroupLabels.alertname }}{{ end }}{{- ` • ` }}{{- if gt (.Alerts.Firing|len) 0 }}告警中:{{ .Alerts.Firing|len }}{{ end }}{{- if and (gt (.Alerts.Firing|len) 0) (gt (.Alerts.Resolved|len) 0) }}/{{ end }}{{- if gt (.Alerts.Resolved|len) 0 }}已恢复:{{ .Alerts.Resolved|len }}{{ end }}{{ end }}{{ define "__externalURL" -}}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{- end }}{{ define "__alertinstance" -}}{{- if ne .Labels.alertinstance nil -}}{{ .Labels.alertinstance }}{{- else if ne .Labels.instance nil -}}{{ .Labels.instance }}{{- else if ne .Labels.node nil -}}{{ .Labels.node }}{{- else if ne .Labels.nodename nil -}}{{ .Labels.nodename }}{{- else if ne .Labels.host nil -}}{{ .Labels.host }}{{- else if ne .Labels.hostname nil -}}{{ .Labels.hostname }}{{- else if ne .Labels.ip nil -}}{{ .Labels.ip }}{{- end -}}{{- end }}{{ define "__alert_list" }}{{ range . }}> <font color="comment"> 告警名称 </font>: {{ if .Labels.alertname_cn  }}{{ .Labels.alertname_cn }}{{ else if .Labels.alertname_custom  }}{{ .Labels.alertname_custom }}{{ else if .Annotations.alertname  }}{{ .Annotations.alertname }}{{ else }}{{ .Labels.alertname }}{{ end }}>> <font color="comment"> 告警级别 </font>:{{ ` ` }}{{- if eq .Labels.severity "ok" }}OK{{ end -}}{{- if eq .Labels.severity "info" }}INFO{{ end -}}{{- if eq .Labels.severity "warning" }}WARNING{{ end -}}{{- if eq .Labels.severity "error" }}ERROR{{ end }}>> <font color="comment"> 实例 </font>: `{{ template "__alertinstance" . }}`>{{- if .Labels.region }}> <font color="comment"> 地域 </font>: {{ .Labels.region }}>{{- end }}{{- if .Labels.zone }}> <font color="comment"> 可用区 </font>: {{ .Labels.zone }}>{{- end }}{{- if .Labels.product }}> <font color="comment"> 产品 </font>: {{ .Labels.product }}>{{- end }}{{- if .Labels.component  }}> <font color="comment"> 组件 </font>: {{ .Labels.component }}>{{- end }}> <font color="comment"> 告警状态 </font>: {{ if eq .Status "firing" }}🚨{{ else }}{{ end }} <font color="{{ if eq .Status "firing" }}warning{{ else }}info{{ end }}">{{ .Status | toUpper }}</font>>> <font color="comment"> 开始时间 </font>: {{ .StartsAt.Format "2006-01-02T15:04:05Z07:00" }}>> <font color="comment"> 结束时间 </font>: {{ if .EndsAt.After .StartsAt }}{{ .EndsAt.Format "2006-01-02T15:04:05Z07:00" }}{{ else }}Not End{{ end }}{{- if eq .Status "firing" }}>> <font color="comment"> 告警描述 </font>: {{ if .Annotations.description_cn }}{{ .Annotations.description_cn }}{{ else }}{{ .Annotations.description }}{{ end }}{{- end }}{{ end }}{{ end }}{{ define "__alert_summary" -}}{{ range . }}<font color="{{ if eq .Status "firing" }}warning{{ else }}info{{ end }}">{{ template "__alertinstance" . }}</font>{{ end }}{{ end }}{{ define "prom.title" -}}{{ template "__subject" . }}{{ end }}{{ define "prom.markdown" }}{{ .MessageAt.Format "2006-01-02T15:04:05Z07:00" }}#### 摘要{{ if gt (.Alerts.Firing|len ) 0 }}##### <font color="warning">🚨 触发中告警 [{{ .Alerts.Firing|len }}]</font>{{ template "__alert_summary" .Alerts.Firing }}{{ end }}{{ if gt (.Alerts.Resolved|len) 0 }}#####  <font color="info">✅ 已恢复告警 [{{ .Alerts.Resolved|len }}]</font>{{ template "__alert_summary" .Alerts.Resolved }}{{ end }}#### 详请{{ if gt (.Alerts.Firing|len ) 0 }}##### <font color="warning">🚨 触发中告警 [{{ .Alerts.Firing|len }}]</font>{{ template "__alert_list" .Alerts.Firing }}{{ end }}{{ if gt (.Alerts.Resolved|len) 0 }}#####  <font color="info">✅ 已恢复告警 [{{ .Alerts.Resolved|len }}]</font>{{ template "__alert_list" .Alerts.Resolved }}{{ end }}{{ end }}{{ define "prom.text" }}{{ template "prom.markdown" . }}{{ end }}

alertmanager-webhook-adapter

#alertmanager-webhook-adapter.yaml webhook连接器服务
来源于:https://github.com/bougou/alertmanager-webhook-adapter/tree/main/deploy/k8s

apiVersion: apps/v1
kind: Deployment
metadata:name: alertmanager-webhook-adapternamespace: ops
spec:replicas: 1selector:matchLabels:app: alertmanager-webhook-adaptertemplate:metadata:labels:app: alertmanager-webhook-adapterspec:containers:- name: webhookimage: bougou/alertmanager-webhook-adapter:v1.1.7command:- /alertmanager-webhook-adapter#监听端口- --listen-address=:8090#告警第一行告警数据来源(随便写)- --signature=MyIDC#告警模版所在目录- --tmpl-dir=/msg-tmpl#使用哪个告警模版(这里取决于你想用什么应用报警)#钉钉群机器人的话就写 --tmpl-name=dingding#企业微信群机器人的话就写 --tmpl-name=wechat- --tmpl-name=dingding#- --tmpl-lang=zhenv:- name: TZvalue: Asia/Shanghairesources:requests:memory: 50Micpu: 100mlimits:memory: 250Micpu: 500mvolumeMounts:- name: message-tmplmountPath: /msg-tmplvolumes:- name: message-tmplconfigMap:name: message-tmplrestartPolicy: Always---
apiVersion: v1
kind: Service
metadata:name: alertmanager-webhook-adapternamespace: ops
spec:ports:- port: 80targetPort: 8090protocol: TCPselector:app: alertmanager-webhook-adaptersessionAffinity: None

alertmanager-config

#alertmanager-config.yaml主配置文件,这里主要是修改发送告警的方式

apiVersion: v1
kind: ConfigMap
metadata:name: alertmanager-confignamespace: ops
data:alertmanager.yml: |global: resolve_timeout: 5msmtp_smarthost: 'smtp.exmail.qq.com:465'smtp_from: 'fanxxxxuai@cxxxxne.com'smtp_auth_username: 'fanxxxxuai@cxxxxne.com'smtp_auth_password: '12345'smtp_require_tls: falsetemplates:- '/etc/alertmanager/msg-tmpl/*.tmpl'route:#receiver: 'email-receiver'receiver: 'dingding-receiver'#receiver: 'wechat-receiver'group_by: [cluster, alertname]group_wait: 30sgroup_interval: 5mrepeat_interval: 30mreceivers:#邮件告警- name: 'email-receiver'email_configs:- to: 'fanxxxxuai@cxxxxne.com'send_resolved: truehtml: '{{ template "emailMessage" . }}'#钉钉群告警- name: 'dingding-receiver'webhook_configs:#如下url只需将地址串里的token #替换为创建钉钉群机器人时webhook的token即可#531c0f251944b69c6e731a3bea9a609d9557ebdbcf17b1bc0df8f7b9cf506734- url: http://alertmanager-webhook-adapter:80/webhook/send?channel_type=dingtalk&token=531c0f251944b69c6e731a3bea9a609d9557ebdbcf17b1bc0df8f7b9cf506734#是否发送告警恢复通知send_resolved: true#企业微信群告警- name: 'wechat-receiver'webhook_configs:#如下url只需将地址串里的token #替换为创建企业微信群机器人时webhook的token即可#1cb01f46-f536-4c98-aeac-1455e1472e5d- url: http://alertmanager-webhook-adapter:80/webhook/send?channel_type=weixin&token=1cb01f46-f536-4c98-aeac-1455e1472e5d#是否发送告警恢复通知send_resolved: true 

ps:将prometheus的告警规则 label处添加个’alertinstance’ 若是没有则没有效果里的标题、描述等
规则如下:
在这里插入图片描述
在这里插入图片描述

3.4钉钉群报警信息效果

在这里插入图片描述

在这里插入图片描述


3.5企业微信群报警信息效果

在这里插入图片描述

在这里插入图片描述


总结

在使用alertmanager报警时, 若开启tlssmtp_require_tls: true 的话在发送告警时会报如下错误,需要设置成false即可发送成功;
在这里插入图片描述

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

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

相关文章

Vue组件命名报错 Component name “index“ should always be multi-word

原因 在Vue创建组件时我们往往会使用 index.vue 之类来命名&#xff0c;但是此时组件会报错【Component name "index" should always be multi-word】&#xff0c;组件名应该总是为多个单词组成。这是因为官方文档建议组件名写成驼峰式或者-衔接的形式&#…

【PHP入门教程】PHPStudy环境搭建+HelloWorld运行

文章目录 PHP 的历史PHP 的用途PHP 的特点和优势PHP 环境搭建环境准备安装window 安装CentOS / Ubuntu / Debian 安装 第一个Hello World使用Apache服务运行命令行运行代码 PHP 的历史 PHP&#xff08;Hypertext Preprocessor&#xff09;超文本预处理器是一种开源的通用脚本语…

哈希环算法(C语言版本)

文章目录 理论分析&#xff1a;经典案例案例一&#xff1a;开放寻址法案例二&#xff1a;经典哈希环算法案例总结 理论分析&#xff1a; 所谓的哈希环就是就是数据结构里面的数组&#xff0c;只不过我们通过设置使其首尾相连&#xff0c;而这个数组又非常的大&#xff0c;这些…

设计模式实战总结与Java程序员学习路线图

经过一系列的设计模式实战练习,从在线购物系统到旅行预订系统,本专栏已涵盖了多种常用设计模式的应用与实现。本文将对整个专栏进行总结,并为Java程序员提供一份学习路线图,帮助更好地规划未来的学习与职业发展方向。 一、设计模式学习总结 本专栏分为26篇文章,内容涵盖…

网络硬件升级指南:提升性能的策略与实践

随着企业对网络依赖程度的增加&#xff0c;网络性能的提升已成为信息技术部门的首要任务。本文将探讨如何通过升级网络硬件来提高网络性能&#xff0c;包括选择正确的硬件、实施升级策略和考虑未来网络的可扩展性。 一、网络性能的重要性 在数字化时代&#xff0c;网络是企业…

[BaseCTF 2024] 高校联合新生赛 Crypto (week1-7)

半个月没有落笔了。又到开学季&#xff0c;老油条们又在教新生了。题目很多&#xff0c;本想过于简单就不提交了&#xff0c;可以总是想起去年&#xff0c;到最后总是忘掉哪个作了哪个没作&#xff0c;也挺乱的。这回一共有7周呢&#xff0c;而且有的比赛题目居然不按周排序。 …

CART决策树-基尼指数(全网最详解)

文章目录 一、基尼指数的定义二、基尼指数在CART决策树中的应用三、基尼指数与CART决策树的构建1.计算每个子集的基尼系数&#xff1a;2.计算基尼指数3.选择最优特征4.其余基尼指数5.构建决策树 四、总结 CART决策树基尼指数是CART&#xff08;Classification And Regression T…

计算机网络参考模型

一、OSI七层参考模型&#xff08;ISO——国际标准化组织&#xff09; 应用层&#xff1a;为应用进程提供网络服务&#xff0c;例如你在qq输入几个字符表示层&#xff1a;数据的表示&#xff0c;安全&#xff0c;压缩&#xff08;把人的语言翻译成计算机能识别的语言&#xff09…

[C语言]-基础知识点梳理-文件管理

前言 各位师傅们好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解文件管理的相关知识&#xff0c;也就是常见的 读取&#xff0c;删除一类的操作 文件 为什么要使用文件&#xff1f; 程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&…

Godot自定义快捷键(配置视图快捷键)

如图 这个没啥技术&#xff0c;但是配置快捷键的时候有讲究如图 选择万国码并且将前后左右下上&#xff08;顶底&#xff09;分别配置为123456。汝等自管记好&#xff0c;今后自有妙用&#xff08;哈哈&#xff09;效果如图

AC 自动机查漏补缺

推荐在 cnblogs 上阅读 AC 自动机查漏补缺 前言 今年 1 月份学过一次&#xff0c;当时自以为掌握得很好&#xff0c;实际上就是依托答辩。而且还有很多地方是有严重误导性的。所以这篇查漏补缺就是记录一下自己对 AC 自动机尚不完全掌握的地方。并对之前的那篇不太正确的题解…

解决电脑突然断网没网,以太网无网络访问权限,本地连接时出错:地址仍未与网络终结点关联

帮同事处理网络问题&#xff0c;尝试了拔插网线&#xff0c;重启电脑&#xff0c;禁用启用以太网&#xff0c;都没有解决。 于是在**命令提示符(cmd)**中执行命令&#xff1a; ipconfig /release 按回车执行后&#xff0c;返回提示&#xff1a;本地连接时出错&#xff1a;地址…

什么是GD32 MCU读保护?

如今电子产品市场风云变幻&#xff0c;暗流汹涌&#xff0c;有没有小伙伴遇到自己费了大力气写出来的代码&#xff0c;很容易就被别人“借鉴”了&#xff0c;真的是让闻者伤心&#xff0c;听着落泪啊。 那有没有什么方法可以防止别人将你的代码从MCU读出来呢&#xff1f;答案当…

大众点评2024年6月全国全分类店铺基础信息数据库

大众点评的采集在2023年之前还是比较好采集的&#xff0c;很多接口不需要登录&#xff0c;即使登录一个帐号也可以采集很多&#xff0c;所以大约2023年8月以前的大众点评店铺字段非常丰富&#xff0c;几乎所有常见店铺字段都能采集。 2023年8月以后&#xff0c;大量接口权限变…

远程消息传递的艺术:NSDistantObject在Objective-C中的妙用

标题&#xff1a;远程消息传递的艺术&#xff1a;NSDistantObject在Objective-C中的妙用 引言 在Objective-C的丰富生态中&#xff0c;NSDistantObject扮演着至关重要的角色&#xff0c;特别是在处理分布式系统中的远程消息传递。它允许对象之间跨越不同地址空间进行通信&…

网安新声 | 网易云音乐崩了:网络安全如何守护在线体验

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 8月19日&#xff0c;#网易云音乐崩…

企业高性能web服务器【Nginx详解】

一.Web 服务基础介绍 1.1 互联网发展历程 1993年3月2日&#xff0c;中国科学院高能物理研究所租用AT&T公司的国际卫星信道建立的接入美国SLAC国家实 验室的64K专线正式开通&#xff0c;成为我国连入Internet的第一根专线。 1995年马云开始创业并推出了一个web网站 中国黄页…

VAuditDemo安装漏洞

目录 VAuditDemo安装漏洞 index.php header.php config.php lib.php install.php 分析结果 漏洞利用 第一步&#xff1a;删除install.lock文件&#xff0c;访问 install.php 抓包 第二步&#xff1a;通过审计构造payload 第三步&#xff1a;修改抓包请求内容&#x…

异常在代码中的两个作用

一.异常的作用: 作用一:异常是用来查询bug的关键参考信息。 作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况。 二.举例: 例1: 一个JavaBean类: package com.itheima.a01MyExpection;public class Student { private String name; private int…

【极限性能,尽在掌控】ROG NUC:游戏与创作的微型巨擘

初见ROG NUC&#xff0c;你或许会为它的小巧体型惊讶。然而&#xff0c;这看似不起眼的机身内&#xff0c;蕴藏着游戏、创意的强大能量。 掌中风暴&#xff0c;性能无界 ROG NUC搭载英特尔高性能处理器&#xff0c;配合高速NVMe SSD固态硬盘以及可选的高端独立显卡&#xff08…