Prometheus监控Linux主机(node-exporter)

2023-10-27

Prometheus监控Linux主机

Prometheus node-exporter 监控Linux服务器

node-export 主要用来做Linux服务器监控,比如服务器的进程数、消耗了多少 CPU、内存,磁盘空间,iops,tcp连接数等资源。

Node Exporter 是用于暴露 *NIX 主机指标的 Exporter,比如采集 CPU、内存、磁盘等信息。采用 Go 编写,不存在任何第三方依赖,所以只需要下载解压即可运行。

Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。

node-exporter用于采集服务器层面的运行指标,包括机器的loadavg、filesystem、meminfo等基础监控,类似于传统主机监控维度的zabbix-agent

node_exporter:用于监控Linux系统的指标采集器。

常用指标:

•CPU

• 内存

• 硬盘

• 网络流量

• 文件描述符

• 系统负载

• 系统服务

数据接口:http://IP:9100/metrics

使用文档:https://prometheus.io/docs/guides/node-exporter/

GitHub:GitHub - prometheus/node_exporter: Exporter for machine metrics

一、node-exporter 使用

1.1 下载 node-exporter

node-exporter 下载地址:https://prometheus.io/download/

node-expoeter

node-exporter 可以使用命令行参数也可以指定参数命令启动

1.2 配置node-exporter

该 metrics 接口数据就是一个标准的 Prometheus 监控指标格式,我们只需要将该端点配置到 Prometheus 中即可抓取该指标数据。为了了解 node_exporter 可配置的参数,我们可以使用 ./node_exporter -h 来查看帮助信息:


☸ ➜ ./node_exporter -h
    --web.listen-address=":9100"  # 监听的端口,默认是9100
    --web.telemetry-path="/metrics"  # metrics的路径,默认为/metrics
    --web.disable-exporter-metrics  # 是否禁用go、prome默认的metrics
    --web.max-requests=40     # 最大并行请求数,默认40,设置为0时不限制
    --log.level="info"        # 日志等级: [debug, info, warn, error, fatal]
    --log.format=logfmt     # 置日志打印target和格式: [logfmt, json]
    --version                 # 版本号
    --collector.{metric-name} # 各个metric对应的参数

以使用 --collectors.enabled参数指定node_exporter收集的功能模块,或者用--no-collector指定不需要的模块,如果不指定,将使用默认配置。

最重要的参数就是 --collector.,通过该参数可以启用我们收集的功能模块,node_exporter 会默认采集一些模块,要禁用这些默认启用的收集器可以通过 --no-collector. 标志来禁用,如果只启用某些特定的收集器,基于先使用 --collector.disable-defaults 标志禁用所有默认的,然后在通过指定具体的收集器 --collector. 来进行启用。下图列出了默认启用的收集器:

在这里插入图片描述

相关文档地址

1.3 编写启动脚本

创建prometheus组和用户

sudo groupadd -r prometheus
sudo useradd -r -g prometheus -s /sbin/nologin -M -c "prometheus Daemons" prometheus
vim /usr/lib/systemd/system/node_exporter.service
 

[Unit]
Description=node_exporter
After=network.target 
 #可以创建相应的用户和组 启动
User=prometheus
Group=prometheus

[Service]
ExecStart=/usr/local/node_exporter/node_exporter\
          --web.listen-address=:9100\
          --collector.systemd\
          --collector.systemd.unit-whitelist=(sshd|nginx).service\
          --collector.processes\
          --collector.tcpstat
[Install]
WantedBy=multi-user.target


1.4 启动 node_exporter

systemctl daemon-reload
systemctl start process_exporter
systemctl enable process_exporter

验证监控数据

curl http://localhost:9100/metrics

在这里插入图片描述

二、prometheus 配置

添加或修改配置

- job_name: 'dev_prometheus'
  scrape_interval: 10s
  honor_labels: true
  metrics_path: '/metrics'

  static_configs:
  - targets: ['127.0.0.1:9090','127.0.0.1:9100']
    labels: {cluster: 'dev',type: 'basic',env: 'dev',job: 'prometheus',export: 'node-exporter'}
  - targets: ['127.0.0.1:9256']
    labels: {cluster: 'dev',type: 'process',env: 'dev',job: 'prometheus',export: 'process_exporter'}

重启 prometheus 服务

curl -X POST http://127.0.0.1:9090/-/reload

三、grafana 出图

process-exporter 对应的 dashboard 为:https://grafana.com/grafana/dashboards/16098-1-node-exporter-for-prometheus-dashboard-cn-0417-job/

效果如下

在这里插入图片描述
在这里插入图片描述

四、常用监控规则

Prometheus 告警规则

参考网站:https://awesome-prometheus-alerts.grep.to/rules

这个网站上有好多常用软件的告警规则,但是有些并不一定实用,有些使用起来会有错误,这里就把这些都给排除掉,只保留能使用的

结合文章:https://www.cnblogs.com/sanduzxcvbnm/p/13589792.html 来使用

groups:
    - name: 主机状态-监控告警
      rules:
      - alert: 主机状态
        expr: up == 0
        for: 1m
        labels:
          status: 非常严重
        annotations:
          summary: "{{$labels.instance}}:服务器宕机"
          description: "{{$labels.instance}}:服务器延时超过5分钟"
    
      - alert: CPU使用情况
        expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 60
        for: 1m
        labels:
          status: 一般告警
        annotations:
          summary: "{{$labels.mountpoint}} CPU使用率过高!"
          description: "{{$labels.mountpoint }} CPU使用大于60%(目前使用:{{$value}}%)"
  
      - alert: 内存使用
        expr: 100 -(node_memory_MemTotal_bytes -node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes ) / node_memory_MemTotal_bytes * 100> 80
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 内存使用率过高!"
          description: "{{$labels.mountpoint }} 内存使用大于80%(目前使用:{{$value}}%)"
      - alert: IO性能
        expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 流入磁盘IO使用率过高!"
          description: "{{$labels.mountpoint }} 流入磁盘IO大于60%(目前使用:{{$value}})"
 
      - alert: 网络
        expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 流入网络带宽过高!"
          description: "{{$labels.mountpoint }}流入网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"
 
      - alert: 网络
        expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 流出网络带宽过高!"
          description: "{{$labels.mountpoint }}流出网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"
    
      - alert: TCP会话
        expr: node_netstat_Tcp_CurrEstab > 1000
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} TCP_ESTABLISHED过高!"
          description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"
 
      - alert: 磁盘容量
        expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 磁盘分区使用率过高!"
          description: "{{$labels.mountpoint }} 磁盘分区使用大于80%(目前使用:{{$value}}%)"

五、Ansible 批量添加部署

在这里插入图片描述

这里采用 Consul 注册发现方式,相关类容可以查询网上

5.1Consul 注册脚本

#!/bin/bash
service_name=$1
instance_id=$2
ip=$3
port=$4
 
curl -X PUT -d '{"id": "'"$instance_id"'","name": "'"$service_name"'","address": "'"$ip"'","port": '"$port"',"tags": ["'"$service_name"'"],"checks": [{"http": "http://'"$ip"':'"$port"'","interval": "5s"}]}' http://10.1.8.202:8500/v1/agent/service/register


5.2 Ansible 剧本脚本

[root@openvpn node]# cat playbook.yml 
- hosts: Sm
  remote_user: root
  gather_facts: no
  tasks:
    - name: 推送采集器安装包
      unarchive: src=node_exporter-1.2.2.linux-amd64.tar.gz dest=/usr/local/
    - name: 重命名
      shell: |
        cd /usr/local/ 
        if [ ! -d node_exporter ];then 
           mv node_exporter-1.2.2.linux-amd64  node_exporter 
        fi
    - name: 查询主机名称
      shell: echo "`hostname`"
      register: name_host
    - name: 推送system文件
      copy: src=node_exporter.service dest=/usr/lib/systemd/system
    - name: 启动服务
      systemd: name=node_exporter state=started enabled=yes
    - name: 推送注册脚本
      copy: src=consul-register.sh dest=/usr/local/node_exporter
    - name: 注册当前节点
      shell: /bin/sh /usr/local/node_exporter/consul-register.sh {{ group_names[0] }} {{ name_host.stdout  }} {{ inventory_hostname }} 9100



六、指标自定义监控

6.1 自定义监控

node_exporter的–collector.textfile是一个收集器,这个收集器可以允许我们暴露自定义指标,比如某些pushgateway功能中自定义的指标,就可以使用–collector.textfile功能来实现,而且,node_exporter实现起来更加优雅。用node_expoerter ,直接在现在基础上做textfile collector即可。如果有pushgateway的话,可是使用pushgateway的,也可以使用textfilecollector。

node_exporter的collector.textfile 功能自定义监控,collector.text收集器通过扫描指定目录中的文件,提取所有格式为Prometheus指标的字符串,然后暴露它们以便抓取

参数:–collector.textfile.directory

6.2 Textfile Collector使用

因为node_exporter之前已经安装过,如果node_exporter启动时没有指定–collector.textfile.directory参数,需要在启动文件里面,添加上参数,并确认文件指的目录存在。

[root@openvpn disk]# cat node_exporter.service 
[Unit]
Description=node_exporter
After=network.target 
 
[Service]
ExecStart=/usr/local/node_exporter/node_exporter\
          --web.listen-address=:9100\
          --collector.systemd\
          --collector.systemd.unit-whitelist=(sshd|nginx).service\
          --collector.processes\
          --collector.tcpstat\
          --collector.supervisord\
          --collector.textfile.directory="/usr/local/node_exporter"
	  #指定以的监控目录
[Install]
WantedBy=multi-user.target

6.3 启动

#启动
# systemd 方式启动
systemctl daemon-reload 
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter

# supervisor方式启动
supervisorctl update
supervisorctl status
supervisorctl start node_exporter
supervisorctl restart node_exporter
​
​
#检查是否启动成功
ss -untlp |grep 9100
ps -ef |grep node_exporter

6.4 写入自定义指标

写入自定义指标,这个需要自己开发脚本,将数据写入对应的文件即可。也可以在github(点我点我…)中看实例文件,熟悉python或者shell都可以写。

GitHub 中有提供模板的,比如 directory-size.sh

# cat directory-size.sh
  
#!/bin/sh
#
# Expose directory usage metrics, passed as an argument.
#
# Usage: add this to crontab:
#
# */5 * * * * prometheus directory-size.sh /var/lib/prometheus | sponge /var/lib/node_exporter/directory_size.prom
#
# sed pattern taken from https://www.robustperception.io/monitoring-directory-sizes-with-the-textfile-collector/
#
# Author: Antoine Beaupré <anarcat@debian.org>
echo "# HELP node_directory_size_bytes Disk space used by some directories"
echo "# TYPE node_directory_size_bytes gauge"
du --block-size=1 --summarize "$@" \
  | sed -ne 's/\\/\\\\/;s/"/\\"/g;s/^\([0-9]\+\)\t\(.*\)$/node_directory_size_bytes{directory="\2"} \1/p'
  

此处是我给的简单shell脚本获取数据

[root@openvpn disk]# cat disk_cheak.sh 
#!/bin/sh
system=$(lsblk -fs |grep -w  / |awk '{print $1}')
disk=$(lsblk   -rfs|grep -E 'xfs|f2fs|ntfs'| grep -v $system|awk '{print $5}' |awk -F '%' '{print $1}' |wc -l)
theNum=$( df -h |grep /data/plot  |wc -l)
name="check_disk_nums"
pool_nums=$(tail -n 1  /root/hpool/log/miner.log.log | awk '{print $6}'|cut -d '=' -f 2|awk -F '[ "]' '{print $4,$NF}'|awk '{sub(/^[\t ]*/,"");print}')
CPU_sensors=$(sensors | grep "^Package id 0:" | sed 's/Package id 0://' | sed 's/^\s*.+//' | awk '{print $1}' | sed 's/°C//')
echo "check_cpu_sensors   $CPU_sensors" > /usr/local/node_exporter/check_cpu_sensors.prom
echo "check_pool_nums   $pool_nums" > /usr/local/node_exporter/check_pool_nums.prom
if [ $disk  !=  $theNum ]; then
    echo "$name  0"  > /usr/local/node_exporter/check_disk_nums.prom
else
    echo "$name  $disk" > /usr/local/node_exporter/check_disk_nums.prom
fi

6.5 配置定时任务启动

chmod a+x disk_cheak.sh

crontab -l
#Ansible: check_disk
*/5 * * * * /bin/bash /usr/local/node_exporter/disk_cheak.sh

在这里插入图片描述

6.6 ansible批量添加执行

在这里插入图片描述

[root@openvpn disk]# cat playbook.yml 
- hosts: all
  remote_user: root
  gather_facts: no
  tasks:
    - name: 推送system文件
      copy: src=node_exporter.service dest=/usr/lib/systemd/system
    - name: 开机启动服务
      systemd: name=node_exporter state=restarted enabled=yes
    - name: 推送磁盘脚本
      copy: src=disk_cheak.sh dest=/usr/local/node_exporter mode=u+x
    - name: 设置定时任务
      cron: name="check_disk" minute="*/5" job="/bin/bash /usr/local/node_exporter/disk_cheak.sh" state="present"
    - name: 执行脚本
      shell: /bin/bash /usr/local/node_exporter/disk_cheak.sh




执行命令
ansible-playbook playbook.yml -i ./hosts1  -f 10

6.7 验证数据

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prometheus监控Linux主机(node-exporter) 的相关文章

  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 丢失系列/数据的警报

    我试图了解当指标不再被抓取时如何让 Grafana 提醒我 我在这个例子中使用的指标是mongodb instance uptime seconds 当实例出现故障时 不再生成指标 导致 Prometheus 中指标丢失 此时警报已触发wh
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写

随机推荐

  • 第八章 综合案例——构建DVD租赁商店数据仓库①

    8 3 2 加载日期数据至日期维度表 1 打开Kettle工具 创建转换 使用Kettle工具 创建一个转换load dim date 并添加生成记录控件 增加序列控件 JavaScript代码控件 表输出控件以及Hop跳连接线 2 配置
  • 用作者提供的net1->net2生成MTCNN的训练样本(positive,negative,part,landmark)

    本代码基于作者提供的python版本代码修改 参考 https github com DuinoDu mtcnn blob master demo py 作者提供 https github com dlunion mtcnn blob ma
  • C++中pair使用详细说明

    一 pair 的介绍 pair 是一个很实用的 小玩意 当想要将两个元素绑在一起作为一个合成元素 又不想要因此定义结构体时 使用 pair 可以很方便地作为一个代替品 也就是说 pair 实际上可以看作一个内部有两个元素的结构体 且这两个元
  • Python轻量级Web框架Flask(3)——Flask路由参数/Flask请求与响应/重定项/异常处理

    1 Flask路由参数和methods参数 路由其实就是一个路径 就是 a route template test 中的 template test 每一个路由对应的是唯一的一个功能 如果要实现很多个功能 就需要很多个路由 methods参
  • #992: invalid macro definition: USE_STDPERIPH_DRIVER.STM32F10X_MD问题解决方法

    现像 在进行STM32进行建立工程过程中 进行编译后出现如下报错 no source Error command line 992 invalid macro definition USE STDPERIPH DRIVER STM32F10
  • 我的NVIDA开发者之旅-在GPU上运行Pytorch代码

    我的NVIDIA开发者之旅 征文活动进行中 目录 介绍 查看GPU信息 Pytorch指定显卡 Demo 参考 介绍 Pytorch与CUDA的安装可以参照我之前写的深度学习环境搭建 Windows10安装cuDNN Pytorch能够使用
  • Linux网络基础5(链路层---以太网)

    链路层 负责相邻设备之间的数据传输 以太网协议 ethernet 协议格式 48位源端 对端mac地址 识别指定相邻设备 mac地址 uint8 t mac 6 网卡的物理硬件地址 在出厂时设定 16位数据类型 用于数据分用时上层解析协议的
  • Kettle 将文本文件转为excel输出

    关注微信公共号 小程在线 关注CSDN博客 程志伟的博客 一 将文本文件转为excel输出 1 选择打开 新建转换 2 点击文本文件输入 3 点击浏览 找到我们需要的文本文件 4 选择好之后点击增加 5 显示文件的具体路径 6 点击 显示文
  • html中img标签特性及块元特性

    img特性 1 img不会独占一行 一行可以放多个 2 img是行内元素 但具有行内块属性 可以自由设置宽高 这种内容可替换的元素 虽然属于 inline 但又能设置height width等值 块元素特性 1 每一个块级元素都是独占一行
  • ajax可以做哪些事,Ajax

    1 ajax 是什么 有什么作用 ajax主要是实现页面和web服务器之间数据的异步传输 不采用ajax的页面 当用户在页面发起请求时 就要进行整个页面的刷新 刷新快慢取决于服务器的处理快慢 在这个过程中用户必须得等待 不能进行其他操作 采
  • Typora 远程代码执行漏洞(CVE-2023-2317)

    1 漏洞介绍 Typora是一款编辑器 Typora 1 6 7之前版本存在安全漏洞 该漏洞源于通过在标签中加载 typora app typemark updater update html 可以在Typora主窗口中加载JavaScri
  • Nginx:配置worker进程的所属用户

    Nginx的配置文件 etc nginx nginx conf中定义了启动worker时的所属用户 全局块 user www data worker进程的所属用户 nginx默认设置为www data 但如果该用户配置的不正确 可能造成业务
  • 【Python 实战】---- 批量对图片添加不同水印

    1 需求 多水印 多图片 对图片和水印进行一一对应的批量添加 2 效果对比 加水印前和加水印后 3 开发思路 由于水印是多个 同时图片也是多个 所以考虑使用excel对他们进行配置 好一一对应 字体的获取 不同文字的字体不同 水印显示的位置
  • 常见的六大聚类算法

    1 K Means K均值 聚类 算法步骤 1 首先我们选择一些类 组 并随机初始化它们各自的中心点 中心点是与每个数据点向量长度相同的位置 这需要我们提前预知类的数量 即中心点的数量 2 计算每个数据点到中心点的距离 数据点距离哪个中心点
  • Kubernetes CKA考试和真题(中)

    前言 上一篇文章分享了CKA考试和前5个题目及其解答 这一篇继续分享6 10题 第六题 使用service暴露应用 题目 重新配置现有的deployment front end 以及添加名为http的端口规范来公开现有的容器nginx的端口
  • 深入剖析Vue源码 - 完整渲染过程

    继上一节内容 我们将Vue复杂的挂载流程通过图解流程 代码分析的方式简单梳理了一遍 其中也讲到了模板编译的大致流程 然而在挂载的核心处 我们并没有分析模板编译后函数如何渲染为可视化的DOM节点 这一节 我们将重新回到Vue实例挂载的最后一个
  • C语言程序设计博客作业04

    这个作业要求在哪里 https pintia cn problem sets 1595556701053566976 我在这个课程的目标是 了解函数 然后会运用函数 这个作业在那个具体方面帮助我实现目标 基础题然我了解了函数使用时的一些格式
  • 基于OpenCV简易检测硬币个数

    背景 在我们生活中常常需要我们用肉眼来计算某些物品的数量 如果通过人工操作会产生 效率低下 长时间的工作会导致眼睛疲劳导致错误的计算 为此 我们可以使用图像处理来检测方便我们 代码如下 include
  • buuctf-misc-ningen(另有解决kali2020无法开启共享文件夹解决方案)

    ningen 附件下载下来是一张jpg文件 先看看属性界面 猜测是压缩文件 使用winhex查看 确实为压缩文件 存在文本文件 binwalk foremost分离 中间一步报错的原因是output文件夹不为空 删除原有的output文件夹
  • Prometheus监控Linux主机(node-exporter)

    Prometheus监控Linux主机 Prometheus node exporter 监控Linux服务器 node export 主要用来做Linux服务器监控 比如服务器的进程数 消耗了多少 CPU 内存 磁盘空间 iops tcp