Prometheus+Grafana的安装和入门

概念

什么是Prometheus?

Prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundclouds使用Go语言开发的开源监控报警系统和时序列数据库(TSDB)。,并且与2015年早起对外发布早期版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。

Prometheus的特点

多维度数据模型。
灵活的查询语言PromQL。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。

Prometheus组件

Prometheus Server 根据配置完成数据采集, 服务发现以及数据存储,提供PromQL查询语言的支持。
Alertmanager 警告管理器,用来进行报警。
Exporters(探针): 是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
Push Gateway 支持临时性Job主动推送指标的中间网关。

Prometheus原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

系统说明

三台centos7虚拟机
[root@node1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)

角色主机名ip
Prometheus服务器server192.168.50.162
grafana服务器grafana192.168.50.163
被监控的linux主机agent192.168.50.164

环境准备
1.各自配置好主机名

hostnamectl set-hostname xxx

2.三台都互相绑定IP与主机名

192.168.50.162 server
192.168.50.163 agent
192.168.50.164 grafana

3.配置时间同步

yum install -y chronyd
vim /etc/chronyd.conf
#添加一下内容
server ntp1.aliyun.com iburst

重启服务
···

systemctl restart chronyd
[root@master prometheus]# chronyc sources

^* 120.25.115.20 2 7 40 879 -33us[ -261us] +/- 19ms
···

4.关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
sed -i '/^SELINUX=/ cSELINUX=disabled' /etc/selinux/config
setenforce 0

Prometheus安装与使用

安装

下载软件
1.前往官网https://prometheus.io/download/,找到对应版本

wget -c https://github.com/prometheus/prometheus/releases/download/v2.53.2/prometheus-2.53.2.linux-amd64.tar.gz

2.解压软件

tar -xf prometheus-2.53.2.linux-amd64.tar.gz
#创建软连接
cd /usr/local
ln -sv prometheus-2.53.2.linux-amd64/ prometheus

3.创建数据目录

mkdir /usr/local/prometheus/data

4.创建服务运行用户

useradd prometheus -M -s /sbin/nologin
修改权限
chown -R prometheus.prometheus /usr/local/prometheus/*

5.创建服务运行脚本

vim /usr/lib/systemd/system/prometheus.service
[Unit]
cription=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus-2.53.2.linux-amd64/prometheus --config.file=/usr/local/prometheus-2.53.2.linux-amd64/prometheus.yml --storage.tsdb.path=/usr/local/prometheus-2.53.2.linux-amd64/prometheus-2.53.2.linux-amd64/data
Restart=on-failure
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

6.启动服务

systemctl daemon-reload
systemctl enable --now prometheus.service
检查服务
systemctl is-active prometheus.service
active
systemctl is-enabled prometheus.service
enabled
检查端口
[root@master prometheus]# netstat -lnupt | grep 9090
tcp6       0      0 :::9090                 :::*                    LISTEN      77034/prometheus  

3.web界面
访问ip:9090即可进入web页面
在这里插入图片描述
在这里插入图片描述
默认只监视当前一台主机
此时点击http://master:9090/metrics会显示无法访问
在这里插入图片描述
将master改为主机ip即可

在这里插入图片描述

通过http://服务器IP:9090/metrics可以查看到监控的数据

[root@master prometheus]# curl http://192.168.50.162:9090/metrics
# HELP go_gc_cycles_automatic_gc_cycles_total Count of completed GC cycles generated by the Go runtime.
# TYPE go_gc_cycles_automatic_gc_cycles_total counter
go_gc_cycles_automatic_gc_cycles_total 11
# HELP go_gc_cycles_forced_gc_cycles_total Count of completed GC cycles forced by the application.
# TYPE go_gc_cycles_forced_gc_cycles_total counter
go_gc_cycles_forced_gc_cycles_total 0
# HELP go_gc_cycles_total_gc_cycles_total Count of all completed GC cycles.
# TYPE go_gc_cycles_total_gc_cycles_total counter
go_gc_cycles_total_gc_cycles_total 11
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 1.6722e-05
go_gc_duration_seconds{quantile="0.25"} 5.7989e-05
go_gc_duration_seconds{quantile="0.5"} 8.8906e-05
go_gc_duration_seconds{quantile="0.75"} 0.000240731
go_gc_duration_seconds{quantile="1"} 0.000904538
go_gc_duration_seconds_sum 0.002091826
go_gc_duration_seconds_count 11
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function.
# TYPE go_gc_gogc_percent gauge
go_gc_gogc_percent 75

查询数据
在这里插入图片描述

监控案例练习

1.监控linux主机

使用Node Exporter采集主机运行数据
在Prometheus的架构设计中, Prometheus Server并不直接服务监控特定的目标, 其主要任务负责数据的收集,存储并且对外提供数据查询支持。 因此为了能够能够监控到某些东西, 如主机的CPU使用率, 我们需要使用到Exporter。 Prometheus周期性的从Exporter暴露的HTTP服务地址( 通常是/metrics) 拉取监控样本数据。
为了能够采集到主机的运行指标如CPU, 内存, 磁盘等信息。 可以使用Node Exporter。
Node Exporter同样采用Golang编写, 并且不存在任何的第三方依赖, 只需要下载, 解压即可运行。
在这里插入图片描述
在官网中找到,复制下载链接,在被监控的linux主机上下载Node Exporter

[root@node2 local]# wget -c https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz

解压:

[root@node2 local]# tar -xf node_exporter-1.8.2.linux-amd64.tar.gz 
[root@node2 local]# ll
total 10428
drwxr-xr-x. 2 root root        6 Apr 10  2018 bin
drwxr-xr-x. 2 root root        6 Apr 10  2018 etc
drwxr-xr-x. 2 root root        6 Apr 10  2018 games
drwxr-xr-x. 2 root root        6 Apr 10  2018 include
drwxr-xr-x. 2 root root        6 Apr 10  2018 lib
drwxr-xr-x. 2 root root        6 Apr 10  2018 lib64
drwxr-xr-x. 2 root root        6 Apr 10  2018 libexec
drwxr-xr-x. 2 1001 1002       56 Jul 14 04:58 node_exporter-1.8.2.linux-amd64
-rw-r--r--. 1 root root 10676343 Jul 14 04:58 node_exporter-1.8.2.linux-amd64.tar.gz
drwxr-xr-x. 2 root root        6 Apr 10  2018 sbin
drwxr-xr-x. 5 root root       49 Aug 10 04:08 share
drwxr-xr-x. 2 root root        6 Apr 10  2018 src

创建服务运行用户

useradd prometheus -M -s /sbin/nologin

修改权限

chown -R prometheus.prometheus /usr/local/node_exporter-1.8.2.linux-amd64/*

添加系统服务

vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter-1.8.2.linux-amd64/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务:

systemctl daemon-reload
systemctl start node_exporter.service
[root@node2 local]# systemctl is-active node_exporter.service 
active
[root@node2 local]# netstat -lnupt | grep 9100
tcp6       0      0 :::9100                 :::*                    LISTEN      85999/node_exporter 

验证:
此时浏览器访问 http://被监控端IP:9100/metrics 就可以查看到node_exporter在被监控端收集的监控信息
在这里插入图片描述
要想在prumetheus server端的web界面中看到被监控端linux主机的数据,还要在Prometheus主配置文件中加入一下配置

[root@master prometheus]# vim /usr/local/prometheus/prometheus.yml- job_name: 'agent1'static_configs:- targets: ['192.168.50.164:9100']

在这里插入图片描述
重启服务

[root@master prometheus]# systemctl daemon-reload
[root@master prometheus]#  systemctl restart prometheus.service

在访问web页面即可看到被监控端主机
在这里插入图片描述

2.监控远程Mysql

依旧是去官网下载mysql_exporter组件
在这里插入图片描述
下载组件:

wget -c https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz

解压组件:

tar -xf mysqld_exporter-0.15.1.linux-amd64

安装mariadb数据库,授权账户

yum install -y mariadb-server
systemctl enable --now mariadbmysql -e "grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '123'"

注意:授权ip为localhost,因为不是prometheus服务器来直接找mariadb获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter再找mariadb。所以这个localhost是指的mysql_exporter的IP

创建一个mariadb配置文件,写上连接的用户名与密码(和上面的授权的用户名和密码要对应)

vim /usr/local/mysqld_exporter/.my.cnf[client]
user=mysql_monitor
password=123

添加系统服务

vim /usr/lib/systemd/system/mysql_exporter.service[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/mysqld_exporter-0.15.1.linux-amd64/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter-0.15.1.linux-amd64/.my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务

[root@node2 local]# chown -R prometheus.prometheus /usr/local/mysqld_exporter/*
[root@node2 local]# systemctl daemon-reload
[root@node2 local]# systemctl start mysql_exporter.service
[root@node2 local]# netstat -lnupt | grep 9104
tcp6 0 0 :::9104 :::* LISTEN

验证:
通过浏览器访问http://被监控端IP:9104/metrics就可以查看到mysql_exporter在被监控端收集的监控信息 配置文件中可更改端口
在这里插入图片描述

修改Prometheus配置:

添加如下配置:
[root@master prometheus]# vim /usr/local/prometheus/prometheus.yml
- job_name: 'agent1_mariadb'
static_configs:
- targets: ['192.168.50.164:9104']
重启prometheus
[root@master prometheus]# systemctl restart prometheus.service

在这里插入图片描述

Prometheus web管理界面查看:
在这里插入图片描述

Grafana安装与使用

Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:
1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack,PagerDuty等获得通知;
4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

安装

在grafana主机下载软件包
在这里插入图片描述

 yum install -y https://dl.grafana.com/oss/release/grafana-11.2.0-1.x86_64.rpm

由于下载速度过慢,因此去阿里镜像仓库下载
增加repo源:

sudo vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://mirrors.aliyun.com/grafana/yum/rpm
repo_gpgcheck=0
enabled=1
gpgcheck=0##再执行
sudo yum makecache
sudo yum install grafana

如果再不行,就直接:

yum install -y https://mirrors.aliyun.com/grafana/yum/rpm/Packages/grafana-10.0.11-1.x86_64.rpm

启动服务:

[root@node1 local]# systemctl enable --now grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@node1 local]# netstat -lnupt | grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      17688/grafana   

使用grafana-cli 安装插件

# grafana-cli plugins list-remote 列出所有可用的插件
# grafana-cli plugins install grafana-worldmap-panel 安装世界地图插件
# grafana-cli plugins install grafana-clock-panel 安装时间插件
# grafana-cli plugins install grafana-piechart-panel 安装圆饼插件
# grafana-cli plugins ls 列出已经安装的插件
安装完毕需要重启服务
# systemctl restart grafana-server

·

使用Grafana连接Prometheus

1.登录web界面
通过浏览器访问 http:// grafana服务器IP:3000就到了登录界面,使用默认的admin用户,admin密码就可以登陆了 192.168.50.163:3000
第一次需要修改admin密码 改为好记的密码:123456
在这里插入图片描述
2.添加数据源
在这里插入图片描述
点击Prometheus
在这里插入图片描述
填入Prometheus端的主机ip:9090 192.168.50.162:9090
在这里插入图片描述
为数据源挑选展示的模版

点击中间那个load,标错了

选择数据源之后,点击import
在这里插入图片描述
效果展示:
在这里插入图片描述

Prometheus告警处理

Prometheus告警简介

告警能力在Prometheus的架构中被划分成两个独立的部分。 如下所示, 通过在Prometheus中定义AlertRule( 告警规则) ,Prometheus会周期性的对告警规则进行计算, 如果满足告警触发条件就会向Alertmanager发送告警信息。

在这里插入图片描述
在Prometheus中一条告警规则主要由以下几部分组成:
  告警名称: 用户需要为告警规则命名, 当然对于命名而言, 需要能够直接表达出该告警的主要内容
  告警规则: 告警规则实际上主要由PromQL进行定义, 其实际意义是当表达式( PromQL) 查询结果持续多长时间( During) 后出发告警

在Prometheus中, 还可以通过Group( 告警组) 对一组相关的告警进行统一定义。 当然这些定义都是通过YAML文件来统一管理的。Alertmanager作为一个独立的组件, 负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。 Alertmanager可以对这些告警信息进行进一步的处理, 比如当接收到大量重复告警时能够消除重复的告警信息, 同时对告警信息进行分组并且路由到正确的通知方, Prometheus内置了对邮件, Slack等多种通知方式的支持, 同时还支持与Webhook的集成, 以支持更多定制化的场景。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。

Alertmanager特性

Alertmanager除了提供基本的告警通知能力以外, 还主要提供了如: 分组、 抑制以及静默等告警特性:
分组
··分组机制可以将详细的告警信息合并成一个通知。 在某些情况下, 比如由于系统宕机导致大量的告警被同时触发, 在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知, 避免一次性接受大量的告警通知, 而无法对问题进行快速定位。例如, 当集群中有数百个正在运行的服务实例, 并且为每一个实例设置了告警规则。 假如此时发生了网络故障, 可能导致大量的服务实例无法连接到数据库, 结果就会有数百个告警被发送到Alertmanager。而作为用户, 可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。 这时可以按照服务所在集群或者告警名称对告警进行分组, 而将这些告警内聚在一起成为一个通知。告警分组, 告警时间, 以及告警的接受方式可以通过Alertmanager的配置文件进行配置。
抑制
·· 抑制是指当某一告警发出后, 可以停止重复发送由此告警引发的其它告警的机制。例如, 当集群不可访问时触发了一次告警, 通过配置Alertmanager可以忽略与该集群有关的其它所有告警。 这样可以避免接收到大量与实际问题无关的告警通知。抑制机制同样通过Alertmanager的配置文件进行设置。
静默
··静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。 如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。静默设置需要在Alertmanager的Werb页面上进行设置。

自定义告警

Prometheus中的告警规则允许你基于PromQL表达式定义告警触发条件, Prometheus后端对这些触发规则进行周期性计算, 当满足触发条件后则会触发告警通知。 默认情况下, 用户可以通过Prometheus的Web界面查看这些告警规则以及告警的触发状态。 当Promthues与Alertmanager关联之后, 可以将告警发送到外部服务如Alertmanager中并通过Alertmanager可以对这些告警进行进一步的处理。
告警规则示例:

1. groups:
2. - name: example
3.   rules:
4.   - alert: HighErrorRate
5.     expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
6.     for: 10m
7.     labels:
8.       severity: page
9.     annotations:
10.      summary: High request latency
11.      description: description info

在告警规则文件中, 我们可以将一组相关的规则设置定义在一个group下。 在每一个group中我们可以定义多个告警规则(rule)。一条告警规则主要由以下几部分组成:
alert: 告警规则的名称。
expr: 基于PromQL表达式告警触发条件, 用于计算是否有时间序列满足该条件。
for: 评估等待时间, 可选参数。 用于表示只有当触发条件持续一段时间后才发送告警。 在等待期间新产生告警的状态为pending。
labels: 自定义标签, 允许用户指定要附加到告警上的一组附加标签。
annotations: 用于指定一组附加信息, 比如用于描述告警详细信息的文字等, annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
为了能够让Prometheus能够启用定义的告警规则, 我们需要在Prometheus全局配置文件中通过
rule_files:指定一组告警规则文件的访问路径, Prometheus启动后会自动扫描这些路径下规则文件中定义的内容, 并且根据这些规则计算是否向外部发送通知:

默认情况下Prometheus会每分钟对这些告警规则进行计算, 如果用户想定义自己的告警计算周期, 则
可以通过 evaluation_interval 来覆盖默认的计算周期:

1. global:
2.   [ evaluation_interval: <duration> | default = 1m ]

部署和简单应用Alertmanager

官网下载软件包,二进制安装
在这里插入图片描述

##下载速度慢的话,可以复制地址去迅雷下载
wget -c https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz

解压软件包

tar xf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/

修改alertmanager.yml文件

[root@master alertmanagerl]vim alertmanager.yml
global:resolve_timeout: 5msmtp_smarthost: 'smtp.163.com:465'smtp_from: '123456@163.com' # 用于发送告警右键的邮箱smtp_auth_username: '123456@163.com'smtp_auth_password: 'xxxxxxxxxxxx' #此处为邮箱的授权密码,非邮箱登录密码smtp_require_tls: falseroute: # 设置报警分发策略group_by: ['alertname'] # 分组标签group_wait: 10s # 告警等待时间。告警产生后等待10s,如果有同组告警一起发出group_interval: 10s # 两组告警的间隔时间repeat_interval: 1m # 重复告警的间隔时间,减少相同右键的发送频率 此处为测试设置为1分钟receiver: 'mail' # 默认接收者routes: # 指定那些组可以接收消息- receiver: mail
receivers:- name: 'mail'email_configs:- to: '123456@163.com' # 接收报警邮件的邮箱检查alertmanager.yml 配置是否正确,注意实际使用时去掉中文注释。[root@master alertmanager]# ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml' SUCCESS
Found:
- global config
- route
- 0 inhibit rules
- 1 receivers
- 0 templates

关联Prometheus与Alertmanager

  1. 修改Prometheus.yml文件中的 alerting 配置项及rule_files配置项
# Alertmanager configuration
alerting:alertmanagers:- static_configs:- targets: ["localhost:9093"]
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:- "rule.yml"# - "second_rules.yml"

在这里插入图片描述

2.编写告规则rule.yml

## 此处用于测试,设置为当内存占用高于10%时,就会告警
vim /usr/local/prometheus/rule.ymlgroups:
- name: mem-rulerules:- alert: "内存报警"expr: (node_memory_MemTotal_bytes -(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 5for: 30slabels:severity: warningannotations:summary: "服务名:{{$labels.alertname}} 内存报警"description: "{{ $labels.alertname }} 内存资源利用率大于 10%"value: "{{ $value }}"

在这里插入图片描述

3.检查配置文件是否出错:

[root@master prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: 1 rule files foundSUCCESS: prometheus.yml is valid prometheus config file syntaxChecking rule.ymlSUCCESS: 1 rules found

在这里插入图片描述
4.重启服务

systemctl restart prometheus.service

`
配置alertmanager服务

mkdir -p /usr/local/alertmanager-0.27.0.linux-amd64/data
vim /usr/lib/systemd/system/alertmanager.service[Unit]
Description=alertmanager
Documentation=https://github.com/prometheus/alertmanager
After=network.target
[Service]
Type=simple
User=prometheus
WorkingDirectory=/usr/local/alertmanager-0.27.0.linux-amd64
ExecStart=/usr/local/alertmanager-0.27.0.linux-amd64/alertmanager --config.file=alertmanager.yml --storage.path=/usr/local/alertmanager-0.27.0.linux-amd64/data --log.level=debug --log.format=json
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务

#改变所属用户
chown -R prometheus.prometheus /usr/local/alertmanager/*
[root@master prometheus]# systemctl daemon-reload
[root@master prometheus]# systemctl enable --now alertmanager.service
[root@master prometheus]# netstat -lnupt | grep 9093
tcp6 0 0 :::9093 :::* LISTEN
111019/alertmanager

测试报警

浏览器访问: http://192.168.50.162:9093 (IP:9093)
在这里插入图片描述
触发告警,查看邮箱
在这里插入图片描述

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

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

相关文章

【Linux —— POSIX信号量 - 基于环形队列的生产消费模型】

Linux —— POSIX信号量 - 基于环形队列的生产消费模型 POSIX信号量信号量的概念POSIX信号量的类型信号量的操作 POSIX信号量函数基于环形队列的生产消费模型设计思路同步和安全性代码 POSIX信号量 信号量的概念 POSIX信号量是一种用于进程和线程之间同步的机制&#xff0c;主…

【netty系列-08】深入Netty组件底层原理和基本实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

数据结构(邓俊辉)学习笔记】串 16——Karp-Rabin算法:串即是数

文章目录 1. 化串为数2. 凡物皆数3. 亦是数 1. 化串为数 接下来的这节&#xff0c;我们再来讨论一种十分另类的串匹配算法&#xff0c;也就是所谓的 Karp-Rabin 算法。回顾此前所介绍的几种串匹配算法&#xff0c;我们所面临的难题是一样的。也就是说在这里&#xff0c;我们每次…

Windows 10/11降级漏洞的工具包现已发布 仅供安全测试

早前有研究人员在分析 Windows 10/11 更新机制时发现微软虽然已经考虑到潜在的安全问题增加了各种限制&#xff0c;但还是存在失误因此存在弱点&#xff0c;研究人员则通过该弱点成功降级了系统。通过该漏洞不仅可以成功降级系统&#xff0c;同时系统还会认为自己已经完成更新并…

Java面试题·区别题·JavaSE部分

系列文章目录 总章 Java区别题 文章目录 系列文章目录前言private/默认/protected/public权限修饰符的区别&和&&区别和联系&#xff0c;I和II区别和联系if和switch的不同之处和equals的区别和联系数组做形参和可变参数做形参联系和区别接口和抽象类的异同之处面向…

嵌入式day36

数据库 专业存储数据、大量数据 数组、链表、变量---->内存&#xff1a;程序运行结束、掉电数据丢失 文件---->硬盘&#xff1a;程序运行结束、掉电数据不丢失 数据库---->硬盘 数据库文件与普通文件区别&#xff1a; 1.普通文件对数据管理&#xff08;增删改查…

Linux入门攻坚——30、sudo、vsftpd

su&#xff1a;Switch User&#xff0c;即切换用户 su [-l user] -c ‘COMMAND’ 如&#xff1a;su -l root -c ‘COMMAND’ 如果没有指定-l user&#xff0c;则默认是root sudo&#xff1a;可以让某个用户不需要拥有管理员的密码&#xff0c;而可以执行管理员的权限。 需…

基于RS232的VGA显示

前言 基于ROM的VGA显示缺点&#xff1a;需要将图片转化为mif文件&#xff0c;使用的RAM是FPGA内部RAM模拟出来的&#xff0c;占用资源大切换显示图片需要重新转化&#xff0c;对ROM进行写入&#xff0c;使用极不方便&#xff0c;因此这里采用RS232进行VGA显示。 正文 一、基于…

代码随想录Day 28|题目:122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 题目题目一&#xff1a;122.买卖股票的最佳时机 II贪心算法&#xff1a;动态规划 题目二&#xff1a;55.跳跃游戏解题思路&#xff1a; 题目三&#xff1a; 45.跳跃游戏 II解题思路方法一方法二 题…

鸿蒙开发入门day15-焦点事件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 焦点事件 基础概念与规范 基础概念 走焦规范 走焦算法 获焦/失…

【逐行注释】MATLAB下的UKF(无迹卡尔曼滤波),带丰富的中文注释,可直接复制到MATLAB上运行,无需下载

文章目录 程序组成部分完整代码运行结果主要模块解读:运动模型绘图部分误差统计特性输出程序组成部分 由模型初始化、运动模型、UKF主体部分、绘图代码和输出部分组成: 完整代码 将下列代码复制粘贴到MATLAB里面,即可运行: % 三维状态量的UKF例程 % 作者联系方式:微信…

安全面试常见问题任意文件下载

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 1.1 任意文件下…

培训第三十九天(了解docker-compose,docker-compose编排容器,配置harbor服务)

一、回顾 1、拉取私有仓库镜像 # 配置dockerdocker pull 10.0.0.10:5000/centosnginx:v0 2、容器网络类型 brideg(net) default# docker启动之后会生成新的虚拟网卡&#xff0c;网卡的名称docker0# 网段默认是172.17.0.1# 所有的容器都桥接docker0&#xff0c;通过桥接共享网…

LRN正则化是什么?

LRN正则化&#xff0c;全称为Local Response Normalization&#xff08;局部响应归一化&#xff09;&#xff0c;是一种在深度学习&#xff0c;特别是在卷积神经网络&#xff08;CNN&#xff09;中常用的正则化技术。该技术旨在通过模拟生物视觉系统中的侧抑制现象&#xff0c;…

OpenLayers3, 设置地图背景

文章目录 一、前言二、代码实现三、总结 一、前言 本文基于OpenLayers3&#xff0c;实现地图加入背景图的功能。 二、代码实现 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head><meta http-equiv"Content-Type"…

QT学习ubuntu qt + desktop

环境搭建 ubuntu 安装QT 遇到kit 选择不了 通过sudo apt-get install qt5-default去安装SDK的时候报错&#xff1a; Package qt5-default is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is …

Linux——nginx 负载均衡

常规的web服务器一般提供对于静态资源的访问&#xff0c;比如说&#xff1a;图片、web样式 网站提供的大部分交互功能都需要web编程语言的支持&#xff0c;而web服务对于程序的调用&#xff0c;不管编译型语言还是解释型语言&#xff0c;web服务同将对于应用程序的调用递交给通…

在蓝桥云课ROS中快速搭建Arduino开发环境

普通方式 一步步慢悠悠的搭建和讲解需要5-6分钟&#xff1a; 如何在蓝桥云课ROS中搭建Arduino开发环境 视频时间&#xff1a;6分40秒 高效方式 如何高效率在蓝桥云课ROS中搭建Arduino开发环境 视频时间&#xff1a;1分45秒 配置和上传程序到开发板 上传程序又称为下载程序h…

html+css+js网页设计 婚庆网站8个页面

htmlcssjs网页设计 婚庆网站8个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

C#骑砍逻辑类Mod制作详细解说

前言&#xff1a; 最近在研究骑砍的mod&#xff0c;主要是想修改其中的逻辑部分&#xff0c;因此有了这篇帖子。 一&#xff0c;文件夹与XML配置 在Modules创建一个新文件夹&#xff0c;文件夹名称随意&#xff0c;不影响实际的读取。 文件夹下面的位置需要固定&#xff0c;因…