docker安装prometheus和grafana

news2024/11/17 22:37:07

docker安装prometheus和grafana

  • docker安装prometheus和grafana
    • 概念简述
    • 安装prometheus
      • 第一步:确保安装有docker
      • 第二步:拉取镜像
      • 第三步:准备相关挂载目录及文件
      • 第四步:启动容器
      • 第五步:访问测试
    • 安装grafana
      • 第一步:确保安装有docker
      • 第二步:拉取镜像
      • 第三步:准备相关挂载目录及文件
      • 第四步:启动容器
      • 第五步:访问测试
      • 第六步:使用测试
    • 安装exporter监控采集程序,采集数据进prometheus
      • node-exporter
    • 安装alertmanager,集成进prometheus
      • 安装alertmanager
        • 第一步:确保安装有docker
        • 第二步:拉取镜像
        • 第三步:准备相关挂载目录及文件
        • 第四步:启动容器
        • 第五步:确保alertmanager正常启动
      • 集成进prometheus
        • 第一步:启用alertmanager
        • 第二步:增加prometheus预警规则
        • 第三步:使得最新的prometheus配置生效
        • 第四步:验证预警生效
    • 相关资料

概念简述

  • prometheus(普罗米修斯):天生为采集存储监控数据而生的时序数据库。prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示

  • grafana:一个监控仪表系统。grafana的数据来源可以有很多(如:Prometheus、Graphite、OpenTSDB、InfluxDB、MySQL/PostgreSQL、Microsoft SQL Serve等等),其中用得最多的数据源是prometheus

    注:prometheus也有自己的UI,不过功能没有grafana强大

xx

安装prometheus

第一步:确保安装有docker

查看docker版本

docker -v

在这里插入图片描述

第二步:拉取镜像

# 你也可以直接拉docker pull prom/prometheus, 即拉取最新的镜像docker pull prom/prometheus:lastest
docker pull prom/prometheus:v2.41.0

第三步:准备相关挂载目录及文件

准备目录

# /opt/prometheus/data目录,准备用来挂载放置prometheus的数据
# /opt/prometheus/config目录,准备用来放置prometheus的配置文件
# /opt/prometheus/rules目录,准备用来挂载放置prometheus的规则文件
mkdir -p /opt/prometheus/{data,config,rules}
# 授权相关文件夹权限
chmod -R 777 /opt/prometheus/data
chmod -R 777 /opt/prometheus/config
chmod -R 777 /opt/prometheus/rules

准备文件

# 配置文件
cat > /opt/prometheus/config/prometheus.yml << \EOF
global:
  # 数据采集间隔
  scrape_interval:     45s
  # 告警检测间隔
  evaluation_interval: 45s

# 告警规则
rule_files:
  # 这里匹配指定目录下所有的.rules文件
  - /prometheus/rules/*.rules

# 采集配置
scrape_configs:
  # 采集项(prometheus)
  - job_name: 'prometheus'
    static_configs:
      # prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
      - targets: ['localhost:9090']
EOF

# 查看一下配置文件
cat /opt/prometheus/config/prometheus.yml

prometheus配置项说明

  • global:全局配置 (如果有内部单独设定,会覆盖这个参数)
  • alerting:告警插件定义。这里会设定alertmanager这个报警插件
  • rule_files:告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现
  • scrape_configs:采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现
  • remote_write:用于远程存储写配置
  • remote_read:用于远程读配置

第四步:启动容器

# 启动prometheus
# config.file:指定容器中,配置文件的位置
# web.enable-lifecycle:启动此项后,当配置文件发生变化后,可通过HTTP API 发送 post 请求到 /-/reload,实现热加载,如:curl -X POST http://47.105.39.189:9090/-/reload
# -v /etc/localtime:/etc/localtime:ro表示让容器使用宿主机的时间, :ro表示只读(注:此方式只针对宿主机和容器的时区文件均为/etc/localtime)
docker run --name prometheus -d \
    -p 9090:9090 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/prometheus/data:/prometheus/data \
    -v /opt/prometheus/config:/prometheus/config \
    -v /opt/prometheus/rules:/prometheus/rules \
    prom/prometheus:v2.41.0 --config.file=/prometheus/config/prometheus.yml --web.enable-lifecycle

第五步:访问测试

访问{ip}:9090即可

在这里插入图片描述

安装grafana

第一步:确保安装有docker

查看docker版本

docker -v

在这里插入图片描述

第二步:拉取镜像

镜像有哪些版本,可以通过查看一个docker镜像有哪些版本查看

# 你也可以直接拉docker pull grafana/grafana, 即拉取最新的镜像docker pull grafana/grafana:lastest
docker pull grafana/grafana:9.3.2

第三步:准备相关挂载目录及文件

准备目录

# /opt/grafana/data目录,准备用来挂载放置grafana的数据
# /opt/grafana/plugins目录,准备用来放置grafana的插件
# /opt/grafana/config目录,准备用来挂载放置grafana的配置文件
mkdir -p /opt/grafana/{data,plugins,config}
# 授权相关文件夹权限
chmod -R 777 /opt/grafana/data
chmod -R 777 /opt/grafana/plugins
chmod -R 777 /opt/grafana/config

准备配置文件

# 先临时启动一个容器
docker run --name grafana-tmp -d -p 3000:3000 grafana/grafana:9.3.2
# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/grafana/config/grafana.ini
# 移除临时容器
docker stop grafana-tmp
docker rm grafana-tmp

# 修改配置文件(需要的话)
# vim /opt/grafana/config/grafana.ini

第四步:启动容器

# 启动prometheus
# 环境变量GF_SECURITY_ADMIN_PASSWORD:指定admin的密码
# 环境变量GF_INSTALL_PLUGINS:指定启动时需要安装得插件
#         grafana-clock-panel代表时间插件
#         grafana-simple-json-datasource代表json数据源插件
#         grafana-piechart-panel代表饼图插件
docker run -d \
    -p 3000:3000 \
    --name=grafana \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/grafana/data:/var/lib/grafana \
    -v /opt/grafana/plugins/:/var/lib/grafana/plugins \
    -v /opt/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
    -e "GF_SECURITY_ADMIN_PASSWORD=admin" \
    -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" \
    grafana/grafana:9.3.2

第五步:访问测试

访问{ip}:3000即可,使用账密admin/admin进行登录即可

在这里插入图片描述

第六步:使用测试

  1. 添加数据源

    在这里插入图片描述

    在这里插入图片描述

    选择普罗米修斯作为数据源

    在这里插入图片描述

    在这里插入图片描述

  2. 制作(或导入)仪表盘

    grafana官网提供了很多模板,选择你喜欢的样式,直接输入Dashboard Id即可直接导入

    这里列出几个本人使用的Dashboard Id

    • 12633:Linux主机详情

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hF6HnXtU-1673599201955)(../repository/image-20230111133217718.png)]

此时,界面就出来了

提示:这会儿还没有数据,是因为prometheus里面本来就没有数据,后面我们只需要使用相应的exporter往prometheus录入一些监控数据(如:安装node-exporter),这里就会显示出来了

在这里插入图片描述

安装exporter监控采集程序,采集数据进prometheus

node-exporter

官方不建议通过Docekr方式部署node-exporter,因为它需要访问主机系统

node-exporter 可以采集机器(物理机、虚拟机、云主机等)的监控指标数据,能够采集到的指标包括 CPU, 内存,磁盘,网络,文件数等信息

  1. 安装node-exporter

    # 下载
    wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
    # 解压
    tar -xvf node_exporter-1.1.2.linux-amd64.tar.gz
    cd node_exporter-1.1.2.linux-amd64
    # 启动
    nohup ./node_exporter  --web.listen-address=":9100" &
    
  2. 访问一下,确保node-exporter已正常启动

    或者直接curl 47.105.39.189:9100进行验证也可

    在这里插入图片描述

  3. 在prometheus中配置当前采集项

    编辑配置文件

    vim /opt/prometheus/config/prometheus.yml
    

    增加当前采集项目

    在这里插入图片描述

  4. 使得最新的prometheus配置生效

    你可以重启prometheus或者使用热加载使新配置生效,这里我们使用热加载的方式

    # 前提条件:启动prometheus时,启用了web.enable-lifecycle
    # 发送post请求到prometheus的/-/reload下触发热加载配置
    curl -X POST http://47.105.39.189:9090/-/reload
    

    注:若你触发热加载后,过个一会儿还没看到监控的变化, 那么你可以使用docker logs {prometheus容器}查看prometheus日志,看到底是否触发了热加载

  5. 验证一下

    此时,我们再在grafana上看监控面板,就会发现有数据了

    在这里插入图片描述

安装alertmanager,集成进prometheus

安装alertmanager

第一步:确保安装有docker

查看docker版本

docker -v

在这里插入图片描述

第二步:拉取镜像

镜像有哪些版本,可以通过查看一个docker镜像有哪些版本查看

# 你也可以直接拉docker pull prom/alertmanager, 即拉取最新的镜像docker pull prom/alertmanager:lastest
docker pull prom/alertmanager:v0.25.0

第三步:准备相关挂载目录及文件

准备目录

# /opt/alertmanager/config目录,准备用来放置alertmanager的配置文件
# /opt/alertmanager/template目录,准备用来挂载放置alertmanager的模板文件
mkdir -p /opt/alertmanager/{config,template}
# 授权相关文件夹权限
chmod -R 777 /opt/alertmanager/config
chmod -R 777 /opt/alertmanager/template

准备配置文件

# 配置文件
cat > /opt/alertmanager/config/alertmanager.yml << \EOF
global:
  resolve_timeout: 5m
  # 发件人
  smtp_from: '1612513157@qq.com'
  # 邮箱服务器的 POP3/SMTP 主机配置 smtp.qq.com 端口为 465 或 587
  smtp_smarthost: 'smtp.qq.com:465'
  # 用户名
  smtp_auth_username: '1612513157@qq.com'
  # 授权码 或 密码
  smtp_auth_password: '你的qq授权码'
  smtp_require_tls: false
  smtp_hello: 'qq.com'
templates:
  # 指定预警内容模板
  - '/etc/alertmanager/template/email.tmpl'
route:
  # 指定通过什么字段进行告警分组(如:alertname=A和alertname=B的将会被分导两个组里面)
  group_by: ['alertname']
  # 在组内等待所配置的时间,如果同组内,5 秒内出现相同报警,在一个组内出现
  group_wait: 5s
  # 如果组内内容不变化,合并为一条警报信息,5 分钟后发送
  group_interval: 5m
  # 发送告警间隔时间 s/m/h,如果指定时间内没有修复,则重新发送告警
  repeat_interval: 5m
  # 默认的receiver。 如果一个报警没有被任何一个route匹配,则发送给默认的接收器
  receiver: 'justrydeng163email'
  #子路由(上面所有的route属性都由所有子路由继承,并且可以在每个子路由上进行覆盖)
  routes:
  # 当触发当前预警的prometheus规则满足:标签alarmClassify的为normal时(标签名、标签值可以自定义,只要和编写的prometheus的rule里面设置的标签呼应上即可),往justrydeng163email发送邮件
  - receiver: justrydeng163email
    match_re:
      alarmClassify: normal
  # 当触发当前预警的prometheus规则满足:标签alarmClassify的值为special时(标签名、标签值可以自定义,只要和编写的prometheus的rule里面设置的标签呼应上即可),往justrydengQQemail发送邮件
  - receiver: justrydengQQemail
    match_re:
      alarmClassify: special
receivers:
- name: 'justrydeng163email'
  email_configs:
  # 如果想发送多个人就以 ',' 做分割
  - to: '13548417409@163.com'
    send_resolved: true
    # 接收邮件的标题
    headers: {Subject: "alertmanager报警邮件"}
- name: 'justrydengQQemail'
  email_configs:
  # 如果想发送多个人就以 ',' 做分割
  - to: '1249823187@qq.com'
    send_resolved: true
    # 接收邮件的标题
    headers: {Subject: "alertmanager报警邮件"}
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
EOF

# 查看一下配置文件
cat /opt/alertmanager/config/alertmanager.yml

准备预警内容模板文件

# 因为我们进行了挂载,所以我们只需编辑宿主机上的模板文件即可
cat > /opt/alertmanager/template/email.tmpl << \EOF
{{ define "email.html" }}
<table border="1">
        <tr>
                <td>报警项</td>
                <td>实例</td>
                <td>报警阀值</td>
                <td>开始时间</td>
                <td>告警信息</td>
        </tr>
        {{ range $i, $alert := .Alerts }}
                <tr>
                        <td>{{ index $alert.Labels "alertname" }}</td>
                        <td>{{ index $alert.Labels "instance" }}</td>
                        <td>{{ index $alert.Annotations "value" }}</td>
                        <td>{{ $alert.StartsAt }}</td>
                        <td>{{ index $alert.Annotations "description" }}</td>
                </tr>
        {{ end }}
</table>
{{ end }}
EOF

# 查看一下模板文件
cat /opt/alertmanager/template/email.tmpl

提示:模板文件中,占位符取值,取的是prometheus的rules文件中对应的值,你可以先写好prometheus的规则文件后,再来编写模板文件

第四步:启动容器

# 启动alertmanager (启动后docker ps检查一下,确保alertmanager起来了即可)
docker run -d --name=alertmanager \
    -p 9093:9093 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/alertmanager/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
    -v /opt/alertmanager/template:/etc/alertmanager/template \
    prom/alertmanager:v0.25.0

第五步:确保alertmanager正常启动

# 查看一下docker容器
docker ps | grep alertmanager
# 再看一下alertmanager的日志
docker logs alertmanager

集成进prometheus

第一步:启用alertmanager

编辑配置文件

vim /opt/prometheus/config/prometheus.yml

启用alertmanager

# 启用alertmanager
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # alertmanager的地址
          - 172.31.113.186:9093

在这里插入图片描述

第二步:增加prometheus预警规则

提示:prometheus的rules机制,即便不集成alertmanager也是可以用的

# 因为我们启动prometheus时,是挂载了宿主机的/opt/prometheus/rules目录到/prometheus/rules下,且配置了/prometheus/rules目录下所有的.rules文件都会被作为规则文件的
# 所以我们只需要将规则文件创建到宿主机的/opt/prometheus/rules目录下即可
cat > /opt/prometheus/rules/os.rules << \EOF
groups:
- name: os
  rules:
  # prometheus是通过对应exporter的metric指标查询接口获取到被监测对象的数据的。当这个接口调用不通(或调用出错时),会认为up == 0,当持续时间满足for时,会发出对应的节点宕机预警
  # 实际上,exporter的指标查询接口调不通,也可能是因为超时或者其它什么导致的,并不一定是被监控节点down机了
  - alert: instance不可用(宕机或忙)告警
    expr: up == 0
    for: 1m
    labels:
      alarmClassify: normal
    annotations:
      summary: "监控程序{{ $labels.job }}所监控机器不可用"
      description: "监控程序 {{ $labels.job }}(监控程序地址为{{ $labels.instance }}) down机超过1分钟了"
  - alert: CPU告警
    expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 90
    for: 5m
    labels:
      alarmClassify: normal
    annotations:   
      summary: "CPU告警:CPU使用大于90%(目前使用:{{$value}}%)"
      description: "CPU告警:监控程序{{$labels.instance}}所监控机器的CPU使用大于90%(目前使用:{{$value}}%). 已经持续5分钟了"
  - alert: 内存告警
    expr: 100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes) > 90
    for: 30m
    labels:
      alarmClassify: normal
    annotations:
      summary: "内存告警:内存使用大于80%(目前使用:{{$value}}%)"
      description: "内存告警:监控程序{{$labels.instance}}所监控机器的内存使用大于80%(目前使用:{{$value}}%)"
  - alert: 磁盘分区使用率报警
    expr: 100 - ((node_filesystem_avail_bytes{fstype=~"rootfs|xfs",mountpoint=~"/|/etc/hosts"} * 100) / node_filesystem_size_bytes{fstype=~"rootfs|xfs",mountpoint=~"/|/etc/hosts"}) > 80
    for: 1m
    labels:
      alarmClassify: normal
    annotations:
      summary: "磁盘分区告警:{{$labels.mountpoint}} 磁盘分区使用大于80%(目前使用:{{$value}}%)"
      description: "磁盘分区告警:监控程序{{$labels.instance}}所监控机器的磁盘分区使用量大于80%(目前使用:{{$value}}%). 其它信息:device:{{$labels.device}}, mount:{{$labels.mountpoint}} "
  - alert: 挂载磁盘分区使用率报警
    expr: 100 - ((node_filesystem_avail_bytes{mountpoint=~"/rootfs/newDisk|/backup"} * 100) / node_filesystem_size_bytes{mountpoint=~"/rootfs/newDisk|/backup"}) > 80
    for: 1m
    labels:
      alarmClassify: normal
    annotations:
      summary: "挂载磁盘分区告警:{{$labels.mountpoint}} 挂载磁盘分区使用大于80%(目前使用:{{$value}}%)"
      description: "挂载磁盘分区告警:监控程序{{$labels.instance}}所监控机器的挂载磁盘分区使用量大于80%(目前使用:{{$value}}%). 其它信息:device:{{$labels.device}}, mount:{{$labels.mountpoint}} "
  - alert: IO性能
    expr: ((irate(node_disk_io_time_seconds_total[30m]))* 100) > 95
    for: 1m
    labels:
      alarmClassify: normal
    annotations:
      summary: "{{$labels.mountpoint}} 流入磁盘IO使用率过高"
      description: "监控程序{{$labels.instance}}所监控机器的{{$labels.mountpoint }}流入磁盘IO大于95%(目前使用:({{$value}}))"
  - alert: 网络()
    expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 10240
    for: 5m
    labels:
      alarmClassify: normal
    annotations:
      summary: "{{$labels.mountpoint}} 流入网络带宽过高"
      description: "监控程序{{$labels.instance}}所监控机器的 {{$labels.mountpoint }} 流入网络带宽持续5分钟高于10M. RX带宽使用率{{$value}}"
  - alert: 网络()
    expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 10240
    for: 5m
    labels:
      alarmClassify: normal
    annotations:
      summary: "{{$labels.mountpoint}} 流出网络带宽过高"
      description: "监控程序{{$labels.instance}}所监控机器的 {{$labels.mountpoint }} 流出网络带宽持续5分钟高于10M. RX带宽使用率{{$value}}"
EOF

# 查看一下os.rules规则
cat /opt/prometheus/rules/os.rules
  • 一条告警规则主要由以下几部分组成

    • alert:告警规则的名称

    • expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件

    • for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending

    • labels:自定义标签,允许用户指定要附加到告警上的一组附加标签(注:如果自定义的标签名与prometheus.yml下内置的或配置的标签名一样,则会以这里设置的标签为主)

      注:labels下默认有这些标签

      • alertname:告警规则的名称(即:alert指定的名称)

      • device:机器设备

      • fstype:文件系统类型

      • mountpoint:挂载点

      • job:采集任务名。(即:当前预警所属采集任务名,假设prometheus.yml如下所示,采集项aliyun-node预警了,那么这里对应的job值为:xxx)

      • instance:采集对象。(即:当前预警所属采集项地址,假设prometheus.yml如下所示,采集项aliyun-node预警了,那么这里对应的instance值为:47.105.39.189:9100)

        global:
        。。。省略
        alerting:
        。。。省略
        rule_files:
        。。。省略
        scrape_configs:
          # 采集任务
          - job_name: 'xxx'
            static_configs:
              - targets: ['47.105.39.189:9100']
                # 设置采集任务标签 (注:如果预警规则里面设置有同名标签的话,预警时则会覆盖此标签)
                labels:
                  env: prod
                  name: justrydeng
                  instance: xxx-instance
                  group: 'ds'
        
    • annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager

  • 占位符{{$xxx}},用于取值xxx对应的值

    如:{{$labels.instance}},取当前规则文件下,instance标签的值

    如:在annotations中,使用{{$value}}取触发当前预警的预警值

  • 检查预警规则文件是否正确

    # 进入容器
    # docker exec -it {容器id 或 容器名} /bin/sh
    docker exec -it prometheus /bin/sh
    # 使用promtool 工具,执行check指令
    # promtool check rules {规则文件,后缀名随意都可以}
    promtool check rules /prometheus/rules/os.rules
    

第三步:使得最新的prometheus配置生效

因为这里启用了alertmanager,为保险起见,本人这里选择重启prometheus(而不是使用prometheus的热加载)来使生效

# 重启容器prometheus
docker restart prometheus
# 查看日志
docker logs prometheus

第四步:验证预警生效

  • 访问prometheus,查看预警规则是否有了

    在这里插入图片描述

    预警状态说明:

    • Inactive:未触发预警
    • Pending:满足预警规则里面的预警表达式expr了,但是持续时间不满足预警规则里面的for,尚未发送预警信息
    • Firing:触发预警且已发送预警信息
  • 查看邮箱,发现收到了预警消息

    在这里插入图片描述
    注:因为本人后来优化了上面的rule规则的配置内容,所以这里email里面的截图和上面的配置有点出入

相关资料

  • docker安装prometheus+grafana安装详细教程
  • AlertManager简介与告警模板
  • 本文已被收录进《程序员成长笔记》 ,笔者JustryDeng

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

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

相关文章

分享66个ASP源码,总有一款适合您

ASP源码 分享66个ASP源码&#xff0c;总有一款适合您 66个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Jf78pfAPaFo6QhHWWHEq0A?pwdwvtg 提取码&#xff1a;wvtg 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&…

Docker容器与镜像命令

文章目录帮助命令镜像命令容器命令其它命令命令总结帮助命令 显示 Docker 版本信息 docker version显示 Docker 系统信息&#xff0c;包括镜像和容器数 docker info 帮助 docker --help 镜像命令 列出本地主机上的镜像 docker images运行结果 REPOSITORY TAG …

Python采集彼岸4K高清壁纸

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块 import re import requests >>> pip install requests ( 更多资料、教程、文档点击此处跳转跳转文末名片加入君羊&#xff0c;找…

【Leetcode面试常见题目题解】5. 最长公共前缀

题目描述 本文是LC第14题&#xff0c;最长公共前缀&#xff0c;题目描述如下&#xff1a; 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 限制 1 < strs.length < 200 0 < strs[i].length < 200 strs[i] 仅…

数据库 MySQL-window安装和卸载

安装 官网&#xff1a; MySQL :: Download MySQL Community Server 或 MySQL :: Download MySQL Community Server (Archived Versions) 文件目录简述 bin存放了可执行文件&#xff0c;docs是文档&#xff0c;include放的是c语言相关的.h文件&#xff0c;lib是c语言的库文件…

wmv是什么格式?如何录制wmv格式的视频?图文教学

很多小伙伴在使用文件的时候&#xff0c;经常会发现自己的一些文件后缀名是wmv。或者说在工作、学习的过程中&#xff0c;有过被要求使用wmv格式的文件。wmv是什么格式&#xff1f;如何录制wmv格式的视频&#xff1f;今天小编就来详细的跟大家说说。 一、wmv是什么格式&#xf…

SpringBoot复习(一)

底层注解 Configuration 自定义配置类 Bean: 可以通过Bean注解将方法的返回值交给ioc容器来管理 组件id为方法名&#xff0c;组件的类型就是方法的返回类型。 默认组件是单例的 Configuration: 告诉springboot这是一个配置类之前的配置文件 配置类本身也是组件&#xff0c;由s…

【Linux】Makefile/make - 快速理解入门

目录 一、概念理解 1、基本概念 2、举例说明 二、编写 Makefile 1、依赖关系和依赖方法 2、文件清理 3、扩展内容 一、概念理解 1、基本概念 在我们学习 Linux 的过程中&#xff0c;我们可以直接使用 gcc 指令对程序的文本文件逐个进行编译处理&#xff0c;这是因为我…

ASP.NET Core 3.1系列(26)——Autofac中的实例生命周期

1、前言 前面的博客主要介绍了Autofac中的一些注册方法&#xff0c;下面就来介绍一下Autofac中实例的生命周期。之前在介绍ASP.NET Core内置IoC容器的时候说过&#xff0c;实例的生命周期有&#xff1a;瞬时生命周期、域生命周期、全局单例生命周期&#xff0c;而Autofac在这三…

mysql-8.0.31-winx64详细安装教程

一、下载MySQL MySQL官网&#xff1a;https://www.mysql.com/cn/ mysql-8.0.31-winx64下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2、下载结束后&#xff0c;解压到指定目录&#xff0c;笔者存放在D盘 &#xff0c;为求简单&#xff0c;设置目录如下&#…

数据库历史数据年度备份

数据库历史数据年度备份 1、文件说明 matomo_backup.sql 备份库表结构脚本(这个根据自己数据结构准备&#xff0c;对于时间命名的表结构就不要加了&#xff0c;只加非时间命名的表结构) export.sh 数据导出脚本 clean.sh 源数据库历史数据清除脚本 2、需求与思路 需求 对…

怎么把PDF转换成图片?来看看这几个方法吧!

要说我们手机里最多的一种文件格式是什么&#xff1f;那应该就是图片了。相信在智能手机的时代&#xff0c;每个人手机里都会有至少几百上千张照片吧。毕竟有许多的事情我们都希望通过图片、照片的形式来记录下来。所以说如何将其他格式的文件变成图片格式就成了一个不大不小的…

开发那点事(十八)Vue开发PC桌面应用案例

写在前面的话 最近有在研究electron框架&#xff0c;踩了不少坑 &#xff0c;现在把这几天研究的成果分享给大家。 研究成果 vue项目打包成exe可安装程序pc应用版本升级&#xff08;需要配合oss服务器&#xff09; vue应用配置 路由文件base配置为空mode模式为默认的hashv…

智慧门户、信创门户、国产门户、数字化门户,如何构建出七大特色亮点?

作者&#xff1a;郑文平 概述 调研结果显示&#xff0c;世界500强企业100%建设了适合自己的集团门户管理系统&#xff0c;也叫作办公门户或内网门户&#xff0c;并通过统一门户最终提升各自整体的业务管理水平和流转效率&#xff0c;没有建设门户的公司面临如下制约&#xff…

二,Spring IOC以及整合mybatis

0 复习 工厂设计模式 工厂设计模式代替new方式创建对象&#xff0c;目的是解耦合。 Spring做为工厂的使用 applicationContext.xml配置bean标签 如何从工厂中获取对象 //创建工厂 ApplicationContext ctx new ClassPathXmlApplicationContext("classpath:applicationCont…

AWS实战:Aurora到Redshift数据同步

什么是AuroraAmazon Aurora是一种基于云且完全托管关系型数据库服务&#xff0c;与MySQL 和 PostgreSQL 数据库兼容&#xff0c;完全托管意味着自动对数据库进行管理&#xff0c;包括管理数据备份、硬件配置和软件更新等操作Amazon Aurora提供了企业级性能Amazon Aurora提供了多…

【C/C++】动态顺序表详解(附完整源码)

本章内容 写在前面 1.静态与动态是指什么&#xff1f; 2.动态顺序表结构的定义 3.动态顺序表的函数接口实现 4.动态顺序表的问题及思考 5.关于顺序表的OJ题 6.OJ答案及解析 1.移除元素 2.删除有序数组中的重复项 ​3.合并两个有序数组 7.动态顺序表完整源码 1.SeqL…

《mSystems》最新研究| 李香真老师亲临凌波微课LorMe云讲堂解读贡嘎山反硝化菌群组装模式和驱动因素

2021年11月2日&#xff0c;李香真团队在《mSystems》期刊正式发表了题为“Patterns and Drivers of nirK-Typeand nirS-Type Denitrifier Community Assembly along an Elevation Gradient”的研究论文。该研究以青藏高原东部边界最高山——贡嘎山作为研究平台&#xff0c;比较…

小程序与普通网页开发有什么区别?

小程序的开发同普通的网页开发相比有很大的相似性&#xff0c;小程序的主要开发语言也是 JavaScript&#xff0c;但是二者还是有些差别的。 普通网页开发可以使用各种浏览器提供的 DOM API&#xff0c;进行 DOM 操作&#xff0c;小程序的逻辑层和渲染层是分开的&#xff0c;逻…

[前端笔记] 1.WEB基本概念

[前端笔记] 1.WEB基本概念基本概念1.资源 resourse2.链接3.HTTP 协议4.网页的真实样子&#xff1a;HTML静态网页与动态网页1.静态网页2.动态网页现代网站架构1.网站架构当我们访问一个网站时&#xff0c;后台都会发生什么事情捏?www——万维网 www&#xff1a;World Wide Web …