k8s1.28.8版本配置prometheus监控告警

news/2024/4/29 3:11:28/文章来源:https://blog.csdn.net/tianmingqing0806/article/details/137119736

文章目录

          • 官方架构图
          • 组件的具体介绍
          • kube-prometheus包含的组件
            • 简介:
            • 文件存储路径:
        • 结构分析
          • 官网自带的一些规则
            • 自己总结流程
    • 1-创建规则
          • 磁盘使用率报警规则
      • 详解上面rule流程
        • Alertmanagerg查看
    • 2-报警接收器
        • 2.1-邮件报警
          • 修改Alertmanager配置
          • 查看现有的secret alertmanager-main
          • 源配置文件
          • 修改 secret alertmanager-main
          • 参数详解
        • 总结
          • 查看生成的 secret alertmanager-main
    • 3-AlertmanagerConfig 配置
          • 3.1-创建alertmanagerconfig.yaml 邮件版本
          • 3.2-修改alertmanager-alertmanager.yaml
    • 4-告警模板
        • 4.1-Alertmanager CRD 支持 `configMaps` 参数, 会自动挂载到 `/etc/alertmanager/configmaps` 目录, 我们可以将模板文件配置成 configmap,创建模板文件 email.tmpl
        • 4.2-创建 configmap
        • 4.3-更新 Alertmanager 示例, 添加 configmap
        • 4.4-修改 AlertmanagerConfig 配置文件, 指定模板文件
    • 企业微信报警
        • 1告警规则这个自定义的有点长,我后面单独发一篇博客
        • 2-修改Alertmanager配置
        • 3-AlertmanagerConfig 配置
        • 企业微信告警模板
    • 什么是热更新
      • 怎么热更新
        • 查看prometheus的pod的ip地址

参考文档

[Kubernetes集群监控-使用Alertmanager报警配置-腾讯云开发者社区-腾讯云 (tencent.com)](https://cloud.tencent.com/developer/article/2377069)
官方架构图

上图是`Prometheus-Operator`官方提供的架构图,其中`Operator`是最核心的部分,作为一个控制器,他会去创建`Prometheus`、`ServiceMonitor`、`AlertManager`以及`PrometheusRule`4个`CRD`资源对象,然后会一直监控并维持这4个资源对象的状态。其中创建的`prometheus`这种资源对象就是作为`Prometheus Server`存在,而`ServiceMonitor`就是`exporter`的各种抽象,是用来提供专门提供`metrics`数据接口的工具,`Prometheus`就是通过`ServiceMonitor`提供的`metrics`数据接口去 pull 数据的,当然`alertmanager`这种资源对象就是对应的`AlertManager`的抽象,而`PrometheusRule`是用来被`Prometheus`实例使用的报警规则文件。这样我们要在集群中监控什么数据,就变成了直接去操作 Kubernetes 集群的资源对象了,是不是方便很多了。上图中的 Service 和 ServiceMonitor 都是 Kubernetes 的资源,一个 ServiceMonitor 可以通过 labelSelector 的方式去匹配一类 Service,Prometheus 也可以通过 labelSelector 去匹配多个ServiceMonitor。
组件的具体介绍
  • Operator: Operator 资源会根据自定义资源(Custom Resource Definition / CRDs)来部署和管理 Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。
  • Prometheus: Prometheus 资源是声明性地描述 Prometheus 部署的期望状态。
  • Prometheus Server: Operator 根据自定义资源 Prometheus 类型中定义的内容而部署的 Prometheus Server 集群,这些自定义资源可以看作是用来管理 Prometheus Server 集群的 StatefulSets 资源。
  • ServiceMonitor: ServiceMonitor 也是一个自定义资源,它描述了一组被 Prometheus 监控的 targets 列表。该资源通过 Labels 来选取对应的 Service Endpoint,让 Prometheus Server 通过选取的 Service 来获取 Metrics 信息。
  • Service: Service 资源主要用来对应 Kubernetes 集群中的 Metrics Server Pod,来提供给 ServiceMonitor 选取让 Prometheus Server 来获取信息。简单的说就是 Prometheus 监控的对象,例如 Node Exporter Service、Mysql Exporter Service 等等。
  • Alertmanager: Alertmanager 也是一个自定义资源类型,由 Operator 根据资源描述内容来部署 Alertmanager 集群。
kube-prometheus包含的组件
  • Prometheus Operator
  • 高可用的 Prometheus 默认会部署2个pod
  • 高可用的 Alertmanager
  • Prometheus node-exporter
  • Prometheus Adapter for Kubernetes Metrics APIs
  • kube-state-metrics
  • Grafana
简介:
这个kube-prometheus目前应该是开源最好的方案了,该存储库收集Kubernetes清单,Grafana仪表板和Prometheus规则,以及文档和脚本,以使用Prometheus Operator 通过Prometheus提供易于操作的端到端Kubernetes集群监视。以容器的方式部署到k8s集群,而且还可以自定义配置,非常的方便
文件存储路径:
prometheus的监控规则文件在prometheus Pod中的路径:/etc/prometheus/rules/prometheus-prometheus-kube-prometheus-prometheus-rulefiles-0/而这些文件都是通过一个叫PrometheusRule的k8s资源生成的,PrometheusRule用于配置Promtheus的 Rule 规则文件,包括 recording rules 和 alerting,可以自动被 Prometheus 加载。至于为什么 Prometheus 能够识别这个 PrometheusRule 资源对象呢?这就需要查看我们创建的 prometheus 这个资源对象了,里面有非常重要的一个属性 ruleSelector,用来匹配 rule 规则的过滤器,我们这里没有过滤,所以可以匹配所有的,假设要求匹配具有 prometheus=k8s 和 role=alert-rules 标签的 PrometheusRule 资源对象
结构分析
alertmanager-secret.yaml  # 告警配置
prometheus-prometheus.yaml  # 监控配置
prometheusOperator-prometheusRule.yaml  # 默认监控项
官网自带的一些规则

如果这里你接上告警,他默认的一些配置会一直发消息

alertmanager-prometheusRule.yaml    
kubePrometheus-prometheusRule.yaml
kubernetesControlPlane-prometheusRule.yaml  #禁用了我先
kubeStateMetrics-prometheusRule.yaml
nodeExporter-prometheusRule.yaml
prometheusOperator-prometheusRule.yaml
prometheus-prometheusRule.yaml

image.png

自己总结流程
1-创建规则*.rules.yaml,他会自己引用到规则里面
2-报警接收器,先定义Alertmanager文件,然后kubectl create 创建成新的yaml,更新引用
3-创建AlertmanagerConfig,定义告警接收模板,预留标签
4-更新alertmanager-alertmanager.yaml,添加模板绑定标签
5-告警模板,创建*.tmpl模板,更新alertmanager-alertmanager.yaml添加configmap,修改 AlertmanagerConfig 配置文件, 指定模板文件

1-创建规则

磁盘使用率报警规则

当磁盘可用空间少于 50% 时触发告警,如果需要添加其他规则也是创建*.rules.yaml
创建 prometheus-rules.yaml,

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:name: demonamespace: monitoring
spec:groups:- name: demorules:- alert: nodeDiskUsageannotations:description: |节点 {{$labels.instance }}挂载目录 {{ $labels.mountpoint }}当前可用空间 {{ printf "%.2f" $value }}%          summary: |挂载目录可用空间低于 50%expr: |node_filesystem_avail_bytes{fstype!="",job="node-exporter"} /node_filesystem_size_bytes{fstype!="",job="node-exporter"} * 100 < 50        for: 1mlabels:severity: warning

查看生成的告警规则, 当前状态是 pending ,我们设置了 1m 的评估等待时间。一分钟过后进入 firing 状态, 正式发出告警, 此时我们设置的 $label 还没有解析。

image.png

去 Alertmanager 看一下, 成功收到了告警, 且 labels和value 也已经正常解析了
image.png

详解上面rule流程

对于 prometheusrule 的更新操作 (create, delete, update) 都会被 watch 到, 然后更新到统一的一个 configmap 中, 然后 prometheus 自动重载配置
每个 prometheusrule 会作为 configmap prometheus-k8s-rulefiles-0 中的一个 data , data 的命名规则为 <namespace>-<rulename>-ruleuid

root@k8s-master01:~# kubectl get cm prometheus-k8s-rulefiles-0 -n monitoring
NAME                         DATA   AGE
prometheus-k8s-rulefiles-0   7      9m25s# prometheus 实例的挂载信息
root@k8s-master01:~# kubectl get pod prometheus-k8s-0 -n monitoring -o jsonpath='{.spec.volumes[?(@.name=="prometheus-k8s-rulefiles-0")]}' | python3 -m json.tool
{"configMap": {"defaultMode": 420,"name": "prometheus-k8s-rulefiles-0"},"name": "prometheus-k8s-rulefiles-0"
}# prometheus 中实际的存储路径
root@k8s-master01:~# kubectl exec -it prometheus-k8s-0 -n monitoring -- ls /etc/prometheus/rules/prometheus-k8s-rulefiles-0/
monitoring-alertmanager-main-rules-3ebc6559-253d-4f65-9270-f0bf3193d640.yaml
monitoring-grafana-rules-a36dde23-2c31-487e-a115-5cec930163c2.yaml
monitoring-k8s-rules-c102dd2a-580e-4f86-b388-eb51953ada9e.yaml
monitoring-kube-prometheus-rules-a4aeb093-9683-45a2-900e-24de81d551f6.yaml
monitoring-kube-state-metrics-rules-b3f61676-d442-4b7b-bf66-421f710687a7.yaml
monitoring-node-exporter-rules-d6c9d3ba-c1cd-4767-8ccf-ce29a3c67e36.yaml
monitoring-prometheus-operator-rules-3560e71d-f6de-40a6-99df-d0daac87cfb5.yaml

image.png

Alertmanagerg查看

只有当我们设置的规则被触发了我们这边查看才会显示
image.png

image.png

2-报警接收器

Alertmanager 支持很多内置的报警接收器,如 email、slack、企业微信、webhook 等。

2.1-邮件报警
修改Alertmanager配置

vim alertmanager.yaml # 新建的一个yaml

global:resolve_timeout: 5msmtp_from: '0@163.com'smtp_smarthost: 'smtp.163.com:25'smtp_auth_username: '@163.com'smtp_auth_password: 'password'smtp_require_tls: falsesmtp_hello: '163.com'
templates:- '/etc/alertmanager/configmaps/alertmanager-templates/*.tmpl'
route:receiver: Defaultgroup_by: ['alertname', 'cluster']continue: falsegroup_wait: 30sgroup_interval: 5mrepeat_interval: 12h
receivers:
- name: Defaultemail_configs:- to: '@boysec.cn'send_resolved: true
查看现有的secret alertmanager-main

默认的我们可以看到是没有配置接收器以及告警人

kubectl get secret alertmanager-main -n monitoring -o jsonpath='{.data.alertmanager\.yaml}' |base64 -d

image.png

源配置文件

image.png

image.png

修改 secret alertmanager-main
kubectl create secret generic alertmanager-main -n monitoring --from-file=alertmanager.yaml --dry-run=client -o yaml > alertmanager-main-secret.yamlkubectl apply -f alertmanager-main-secret.yaml
参数详解
- `kubectl create secret generic`: 这是创建一个通用类型的Secret的命令,它可以用于存储任何类型的敏感数据。
- `alertmanager-main`: 这是要创建的Secret的名称,这里命名为 `alertmanager-main`。
- `-n monitoring`: `-n` 参数用于指定命名空间,这里将Secret创建在名为 `monitoring` 的命名空间中。
- `--from-file=alertmanager.yaml`: `--from-file` 参数指定了要从文件中读取数据并将其存储在Secret中。在这里,`alertmanager.yaml` 文件中的内容将作为Secret的数据。
- `--dry-run=client`: 这个选项告诉 `kubectl` 仅模拟执行,而不会实际执行创建操作。这样可以将生成的YAML文件输出到标准输出,而不会真正创建Secret。
- `-o yaml`: `-o` 参数指定输出格式,这里指定为YAML格式。
- `> alertmanager-main-secret.yaml`: 将生成的YAML输出重定向到名为 `alertmanager-main-secret.yaml` 的文件中,以供后续使用
总结
#个人总结就是 创建alertmanager.yaml文件的secret,然后导出成新的yaml,类似configmap。然后再去执行新生成的yaml文件,他就会挂载进pod里面
kubectl create secret generic alertmanager-main -n monitoring --from-file=alertmanager.yaml --dry-run=client -o yaml > alertmanager-main-secret.yaml
查看生成的 secret alertmanager-main

配置文件里面的模板就变成你改的模板了

kubectl get secret alertmanager-main -n monitoring -o jsonpath='{.data.alertmanager\.yaml}' |base64 -d

3-AlertmanagerConfig 配置

新建一个 AlertmanagerConfig 类型的资源对象,可以通过 kubectl explain AlertmanagerConfig 或者在线 API 文档来查看字段的含义

3.1-创建alertmanagerconfig.yaml 邮件版本

这个是需要我们创建的,然后修改主alertmanager.yaml,对应标签

# vim alertmanagerconfig.yaml
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:name: email-confignamespace: monitoringlabels:alertmanagerConfig: wangxiansen #这里标签注意等下要用
spec:route:groupBy: ['alertname']groupWait: 30sgroupInterval: 5mrepeatInterval: 12hreceiver: 'Critical'continue: falseroutes:- receiver: 'Critical'match:severity: criticalreceivers:- name: CriticalemailConfigs:- to: '@boysec.cn'sendResolved: truewebhookConfigs:- url: http://dingtalksendResolved: true

不过如果直接创建上面的配置是不会生效的,我们需要添加一个 Label 标签,并在 Alertmanager 的资源对象中通过标签来关联上面的这个对象,比如我们这里新增了一个 Label 标签:alertmanagerConfig: wangxiansen,然后需要重新更新 Alertmanager 对象,添加 alertmanagerConfigSelector 属性去匹配 AlertmanagerConfig 资源对象

3.2-修改alertmanager-alertmanager.yaml

我的这个主配置文件路径在kube-prometheus-0.13.0/manifests

# vim alertmanager-alertmanager.yaml
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:labels:app.kubernetes.io/component: alert-routerapp.kubernetes.io/instance: mainapp.kubernetes.io/name: alertmanagerapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 0.26.0name: mainnamespace: monitoring
spec:image: quay.io/prometheus/alertmanager:v0.26.0nodeSelector:kubernetes.io/os: linuxpodMetadata:labels:app.kubernetes.io/component: alert-routerapp.kubernetes.io/instance: mainapp.kubernetes.io/name: alertmanagerapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 0.26.0replicas: 1                 # 资源问题,这里就先启动一个podsresources:limits:cpu: 100mmemory: 100Mirequests:cpu: 4mmemory: 100Misecrets: []alertmanagerConfigSelector: # 匹配 AlertmanagerConfig 的标签matchLabels:alertmanagerConfig: wangxiansen  # 这个是上面要记得标签securityContext:fsGroup: 2000runAsNonRoot: truerunAsUser: 1000serviceAccountName: alertmanager-mainversion: 0.26.0

image.png

4-告警模板

Alertmanager 收到的告警大概长这个样子
image.png

4.1-Alertmanager CRD 支持 configMaps 参数, 会自动挂载到 /etc/alertmanager/configmaps 目录, 我们可以将模板文件配置成 configmap,创建模板文件 email.tmpl

vim email.tmpl

{{ define "email.html" }}
<html><body>{{- if gt (len .Alerts.Firing) 0 -}}{{- range $index, $alert := .Alerts -}}<p>========= ERROR ==========</p><h3 style="color:red;">告警名称: {{ .Labels.alertname }}</h3><p>告警级别: {{ .Labels.severity }}</p><p>告警机器: {{ .Labels.instance }} {{ .Labels.device }}</p><p>告警详情: {{ .Annotations.summary }}</p><p>告警时间: {{ time (unixMillis .StartsAt) "2006-01-02 15:04:05" }}</p><p>========= END ==========</p>{{- end }}{{- end }}{{- if gt (len .Alerts.Resolved) 0 -}}{{- range $index, $alert := .Alerts -}}<p>========= INFO ==========</p><h3 style="color:green;">告警名称: {{ .Labels.alertname }}</h3><p>告警级别: {{ .Labels.severity }}</p><p>告警机器: {{ .Labels.instance }}</p><p>告警详情: {{ .Annotations.summary }}</p><p>告警时间: {{ time (unixMillis .StartsAt) "2006-01-02 15:04:05" }}</p><p>恢复时间: {{ time (unixMillis .EndsAt) "2006-01-02 15:04:05" }}</p><p>========= END ==========</p>{{- end }}{{- end }}</body>
</html>
{{- end }}
4.2-创建 configmap
kubectl create configmap alertmanager-templates --from-file=email.tmpl --dry-run=client -o yaml -n monitoring > alertmanager-configmap-templates.yaml kubectl apply -f alertmanager-configmap-templates.yaml
4.3-更新 Alertmanager 示例, 添加 configmap

vim alertmanager-alertmanager.yaml

apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
spec:
.....alertmanagerConfigSelector:matchLabels:alertmanager: mainconfigMaps:- alertmanager-templates

image.png

4.4-修改 AlertmanagerConfig 配置文件, 指定模板文件
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:name: email-confignamespace: monitoringlabels:alertmanagerConfig: wangxiansen
spec:route:groupBy: ['alertname']groupWait: 30sgroupInterval: 5mrepeatInterval: 12hreceiver: 'Critical'continue: falseroutes:- receiver: 'Critical'match:severity: criticalreceivers:- name: CriticalemailConfigs:- to: 'xxxxx@boysec.cn'html: '{{ template "email.html" . }}'          # 添加 与模板中的 define 对应sendResolved: true

更新报警配置

kubectl apply -f alertmanagerconfig.yaml

查看新生成的告警邮件

image.png

企业微信报警

1告警规则这个自定义的有点长,我后面单独发一篇博客
2-修改Alertmanager配置

vim alertmanager.yaml # 新建的一个yaml

    global:resolve_timeout: 1msmtp_smarthost: 'smtp.163.com:25'smtp_from: ''smtp_auth_username: ''smtp_auth_password: ''smtp_require_tls: falseroute:group_by: [alertname]group_wait: 10sgroup_interval: 10srepeat_interval: 10mreceiver: wechat-001receivers:- name: 'wechat-001'wechat_configs:- corp_id: xxxx # 企业IDto_user: '@all'             # 发送所有人agent_id: xxxx          # agentIDapi_secret:  # secret

步骤跟邮件告警一样,参考上面

3-AlertmanagerConfig 配置
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:name: email-confignamespace: monitoringlabels:alertmanagerConfig: aike  # 标识此配置对象的标签,用于分类和识别
spec:route:  # 警报路由配置groupBy: ['alertname']  # 根据警报名称分组groupWait: 30s  # 组等待时间groupInterval: 5m  # 组间隔时间repeatInterval: 12h  # 重复间隔时间receiver: 'Critical'  # 默认接收器continue: false  # 是否继续路由routes:- receiver: 'Critical'match:severity: critical  # 匹配严重程度为 critical 的警报receivers:  # 接收器配置- name: Critical  # 接收器名称emailConfigs:  # 邮件配置,用于发送邮件通知- to: ''  # 接收邮件的邮箱地址html: '{{ template "email.html" . }}'  # 添加 与模板中的 define 对应sendResolved: true  # 发送解决警报的通知webhookConfigs:  # Webhook 配置,用于发送警报通知至钉企业微信- url:   # Webhook URLsendResolved: true  # 发送解决警报的通知

修改alertmanager-alertmanager.yaml
步骤一样 省略

企业微信告警模板
{{ define "email.html" }}
<html><body>{{- if gt (len .Alerts.Firing) 0 -}}{{- range $index, $alert := .Alerts -}}{{- if eq $index 0 }}<p>========= xxx环境监控报警 =========</p><p>告警状态:{{ .Status }}</p><p>告警级别:{{ .Labels.severity }}</p><p>告警类型:{{ $alert.Labels.alertname }}</p><p>故障主机: {{ $alert.Labels.instance }} {{ $alert.Labels.pod }}</p><p>告警主题: {{ $alert.Annotations.summary }}</p><p>告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description }}</p><p>触发阀值:{{ .Annotations.value }}</p><p>故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</p><p>========= end =========</p>{{- end }}{{- end }}{{- end }}{{- if gt (len .Alerts.Resolved) 0 -}}{{- range $index, $alert := .Alerts -}}{{- if eq $index 0 }}<p>========= xxx环境异常恢复 =========</p><p>告警类型:{{ .Labels.alertname }}</p><p>告警状态:{{ .Status }}</p><p>告警主题: {{ $alert.Annotations.summary }}</p><p>告警详情: {{ $alert.Annotations.message }}{{ $alert.Annotations.description }}</p><p>故障时间: {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</p><p>恢复时间: {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</p>{{- if gt (len $alert.Labels.instance) 0 }}<p>实例信息: {{ $alert.Labels.instance }}</p>{{- end }}<p>========= end =========</p>{{- end }}{{- end }}{{- end }}</body>
</html>
{{- end }}

流程大概就是这样。。。。
然后进行一下热更新

什么是热更新

为了每次修改配置文件可以热加载prometheus,也就是不停止prometheus,就可以使配置生效

怎么热更新

举例:如修改prometheus-cfg.yaml,想要使配置生效可如下操作

# 修改prometheus-cfg.yaml后
kubectl delete -f /root/k8s/monitor/prometheus-cfg.yaml 
kubectl apply -f  /root/k8s/monitor/prometheus-cfg.yaml # 告诉prometheus-deploy.yaml 需要重新加载 prometheus-cfg.yaml文件的内容
curl -X POST http://10.244.1.52:9090/-/reload
查看prometheus的pod的ip地址
kubectl get pods -n monitoring -o wide | grep prometheus

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

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

相关文章

实战|使用 Node.js 和 htmx 构建全栈应用程序

在本教程中&#xff0c;我将演示如何使用 Node 作为后端和 htmx 作为前端来构建功能齐全的 CRUD 应用程序。这将演示 htmx 如何集成到全栈应用程序中&#xff0c;使您能够评估其有效性并确定它是否是您未来项目的不错选择。 htmx 是一个现代 JavaScript 库&#xff0c;旨在通过…

Haproxy2.8.1+Lua5.1.4部署,haproxy.cfg配置文件详解和演示

目录 一.快速安装lua和haproxy 二.配置haproxy的配置文件 三.配置haproxy的全局日志 四.测试负载均衡、监控和日志效果 五.server常用可选项 1.check 2.weight 3.backup 4.disabled 5.redirect prefix和redir 6.maxconn 六.调度算法 1.静态 2.动态 一.快速安装lu…

【python】网络编程socket TCP UDP

文章目录 socket常用方法TCP客户端服务器UDP客户端服务器网络编程就是实现两台计算机的通信 互联网协议族 即通用标准协议,任何私有网络只要支持这个协议,就可以接入互联网。 socket socke模块的socket()函数 import socketsock = socket.socket(Address Family, type)参…

推动制药行业数字化转型:基于超融合架构的MES一体机解决方案

随着中国对信息化重视程度的不断加深&#xff0c;制药行业作为国民经济的重要支柱之一&#xff0c;也在积极寻求通过数字化手段提升产业效率与产品质量。自党的十六大提出“以信息化带动工业化”的战略以来&#xff0c;制药业的这一转型探索尤为迫切。 在现代制药生产中&#…

scala-idea环境搭建及使用

环境搭建 创建一个新项目&#xff0c;选择maven工程 点击next&#xff0c;写入项目名&#xff0c;然后finish 注意&#xff1a;默认下&#xff0c;maven不支持scala的开发&#xff0c;需要引入scala框架&#xff0c;右键项目点击-》add framework pport....&#xff0c;在下图…

基于java+SpringBoot+Vue的书籍学习平台设计与实现

基于javaSpringBootVue的书籍学习平台设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 书籍学习平台是一个基于Internet的在线学习资源平台&#xf…

Apache Hive的基本使用语法(二)

Hive SQL操作 7、修改表 表重命名 alter table score4 rename to score5;修改表属性值 # 修改内外表属性 ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL""TRUE"); # 修改表注释 ALTER TABLE table_name SET TBLPROPERTIES (comment new_commen…

音视频开发Day01

备注 ffmpeg 库相关函数记忆 FFmpeg 库简介 FFmpeg一共包含8个库: avcodec:编解码(最重要的库) avformat:封装格式处理。 avfilter:滤镜特效处理 avdevice:各种设备的输入输出。 avutil:工具库(大部分库都需要这个库的支持)。 postproc:后加工。 swresample:音频采样数据格式…

一分钟开服 《幻兽帕鲁》游戏专属服务器by京东云主机

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

OSCP靶场--pyLoader

OSCP靶场–pyLoader 考点(信息收集CVE-2023-0297) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.26 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 09:14 EDT Nmap scan report for 192.168.178.26 Host is up…

基于Python的电商特产数据可视化分析与推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 利用网络爬虫技术从某东采集某城市的特产价格、销量、评论等数据&#xff0c;经过数据清洗后存入数据库&#xff0c;并实现特产销售、市场占有率、价格区间等多维度的可视化统计分析&#xff0c;并…

关于使用vscode搭建c/c++编程环境

目录 关于使用vscode搭建c/c编程环境一、前言二、安装 IDE 二、安装TDM-GCC安装三、安装C/C环境四、编写代码并进行编译 关于使用vscode搭建c/c编程环境 一、前言 一直觉得vscode是生产强有力的生产工具&#xff0c;基于此&#xff0c;做一篇学习笔记进行记录。 二、安装 ID…

Prometheus +Grafana +node_exporter可视化监控Linux虚机

1、介绍 待补充 2、架构图 待补充 Prometheus &#xff1a;主要是负责存储、抓取、聚合、查询方面。 node_exporter &#xff1a;主要是负责采集物理机、中间件的信息。 3、搭建过程 配置要求&#xff1a;1台主服务器 n台从服务器 &#xff08;被监控的linux虚机&am…

WPF自定义Panel:让拖拽变得更简单

在 WPF 应用程序中&#xff0c;拖放操作是实现用户交互的重要组成部分。通过拖放操作&#xff0c;用户可以轻松地将数据从一个位置移动到另一个位置&#xff0c;或者将控件从一个容器移动到另一个容器。然而&#xff0c;WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问…

uniApp使用XR-Frame创建3D场景(7)加入点击交互

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 这篇我们讲解如何与场景中的模型交互&#xff08;点击识别&#xff09; 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-mesh id"…

【已修复】iPhone13 Pro 长焦相机水印(黑斑)修复 洗水印

iPhone13 Pro 长焦相机水印&#xff08;黑斑&#xff09;修复 洗水印 问题描述 iPhone13 Pro 后摄3倍相机有黑色斑点&#xff08;水印&#xff09;&#xff0c;如图所示&#xff0c; 后摄相机布局如图所示&#xff0c; 修复过程 拆机过程有风险&#xff0c;没有把握最好不要…

MySQL学习笔记------函数

目录 函数 字符串函数 数值函数 函数 指一段可以直接被另一段程序调用的程序或代码 字符串函数 MySQL中内置了很多字符串函数&#xff0c;常用如下&#xff1a;select 函数 concat(s1,s2,s3,...,sn) 字符串拼接&#xff0c;将s1,s2,...,sn拼接成一个字符串 #字符串拼…

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

初级&#xff1a;用好手上的锤子 1 【感性】认识 C 系编程语言开发调试过程 1.1 视频教程点到为止 1.2 炫技视频看看就行 1.3 编程游戏不玩也罢 有些游戏的主题任务就是编程&#xff0c;游戏和实际应用环境有一定差异&#xff08;工具、操作流程&#xff09;&#xff0c;在…

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长&#xff0c;网站管理员和内容创作者需要不断更新和发布新的文章&#xff0c;以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具&#xff0c;在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章&#xff0c;以…

康耐视visionpro-CogCaliperTool工具详细说明

CogCaliperTool功能说明: 卡尺工具,用于测量距离 CogCaliperTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogCaliperTool ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③.拖动屏幕上的矩形框到需要测量的位置。卡尺的搜索框角度与边缘不平…