监控-Prometheus02-安装并启动
1、使用二进制包安装Prometheus
1、部署环境
- 系统环境
- 10.1.1.11:CentOSLinuxrelease7.7.1908(Core),k8s-master,Prometheus
- 10.1.1.12:CentOSLinuxrelease7.7.1908(Core),k8s-node1
- 10.1.1.13:CentOSLinuxrelease7.7.1908(Core),k8s-node2
- 软件版本
- prometheus:2.36.2
2、下载Prometheus
下载地址:https://prometheus.io/download/ 安装包:prometheus-2.36.2.linux-amd64.tar.gz
3、安装Prometheus
]# mkdir /apps/ ]# tar zvfx prometheus-2.36.2.linux-amd64.tar.gz -C /apps/ ]# ln -s /apps/prometheus-2.36.2.linux-amd64/ /apps/prometheus ]# chown -R root:root /apps/prometheus/
- 查看prometheus目录
]# ls -l /apps/prometheus/ 总用量 203048 drwxr-xr-x 2 3434 3434 38 6月 20 21:27 console_libraries drwxr-xr-x 2 3434 3434 173 6月 20 21:27 consoles drwxr-xr-x 4 root root 70 10月 12 14:26 data -rw-r--r-- 1 3434 3434 11357 6月 20 21:27 LICENSE -rw-r--r-- 1 3434 3434 3773 6月 20 21:27 NOTICE -rwxr-xr-x 1 3434 3434 108069824 6月 20 21:24 prometheus -rw-r--r-- 1 3434 3434 934 6月 20 21:27 prometheus.yml -rwxr-xr-x 1 3434 3434 99826736 6月 20 21:26 promtool
- 检查prometheus版本
]# /apps/prometheus/prometheus --version prometheus, version 2.36.2 (branch: HEAD, revision: d7e7b8e04b5ecdc1dd153534ba376a622b72741b) build user: root@f051ce0d6050 build date: 20220620-13:21:35 go version: go1.18.3 platform: linux/amd64
4、配置unit文件
]# vim /usr/lib/systemd/system/prometheus.service [Unit] Description=Prometheus server daemon After=network.target [Service] Type=simple User=root Group=root ExecStart=/apps/prometheus/prometheus \ --config.file=/apps/prometheus/prometheus.yml \ --storage.tsdb.path=/apps/prometheus/data \ --storage.tsdb.retention.time=15d \ --web.console.templates=consoles \ --web.console.libraries=console_libraries \ --web.max-connections=512 \ --web.external-url=http://10.1.1.11:9090 \ --web.listen-address=0.0.0.0:9090 Restart=on-failure [Install] WantedBy=multi-user.target
- prometheus命令的参数:
- --config.file="prometheus.yml":指定Prometheus的配置文件。
- --web.listen-address="0.0.0.0:9090":监听UI、API和遥测的地址。
- --web.config.file="":[EXPERIMENTAL]启用TLS或鉴权的配置文件路径。
- --web.read-timeout=5m:在超时读取请求和关闭空闲连接之前的最大持续时间。
- --web.max-connections=512:最大并发连接数。
- --web.external-url=<URL>:Prometheus对外可访问的URL(例如,如果Prometheus是通过反向代理提供服务的)。用于生成与Prometheus本身的相对和绝对链接。如果URL有路径部分,它将被用于Prometheus服务的所有HTTP端点的前缀。如果省略,相关的URL组件将自动派生。
- --web.route-prefix=<path>:web端点内部路由的前缀。默认为--web.external-url的路径。
- --web.user-assets=<path>:静态资产目录的路径,可在/user
- --web.enable-lifecycle:通过HTTP请求启用关机和重新加载。
- --web.enable-admin-api:为管理控制操作启用API端点。
- --web.enable-remote-write-receiver:启用API端点接受远程写请求。
- --web.console.templates="consoles":控制台模板的目录,可在/consoles获得。
- --web.console.libraries="console_libraries":控制台库的目录。
- --web.page-title="Prometheus Time Series Collection and Processing Server" Prometheus实例的文档标题。
- --web.cors.origin=".*":用于CORS起源的正则表达式。它是完全固定的。Example: 'https?://(domain1|domain2)\.com'
- --storage.tsdb.path="data/":指定指标数据的存储路径。仅与服务器模式一起使用。
- --storage.tsdb.retention.time=STORAGE.TSDB.RETENTION.TIME:历史数据最大保留时间。当这个标志被设置时,它会覆盖"storage.tsdb.retention"。如果既没有storage.tsdb.retention也没有storage.tsdb.retention.size"。保留时间默认为15d。支持单位:y, w, d, h, m, s, ms.仅与服务器模式使用。
- --storage.tsdb.retention.size=STORAGE.TSDB.RETENTION.SIZE:块可以存储的最大字节数。需要设置单位,支持的单位有:B、KB、MB、GB、TB、PB、EB。例:“512 mb”。基于2的幂,所以1KB是1024B。仅与服务器模式一起使用。
- --storage.tsdb.no-lockfile:不要在数据目录下创建锁文件。仅与服务器模式一起使用。
- --storage.tsdb.allow-overlapping-blocks:允许重叠块,从而支持垂直压缩和垂直查询合并。仅与服务器模式一起使用。
- --storage.tsdb.head-chunks-write-queue-size=0:将头块写入磁盘以进行m映射的队列的大小。为0时,完全禁用队列。实验。仅与服务器模式一起使用。
- --storage.agent.path="data-agent/":指标存储的基本路径。仅与代理模式一起使用。
- --storage.agent.wal-compression:压缩代理WAL。仅与代理模式一起使用。
- --storage.agent.retention.min-time=STORAGE.AGENT.RETENTION.MIN-TIME:当WAL被截断时,在考虑删除之前可以考虑最小年龄样本。仅与代理模式使用。
- --storage.agent.retention.max-time=STORAGE.AGENT.RETENTION.MAX-TIME:当WAL被截断时,在强制删除之前可以使用最大年龄样本。仅与代理模式使用。
- --storage.agent.no-lockfile:不要在数据目录下创建锁文件。仅与代理模式一起使用。
- --storage.remote.flush-deadline=<duration>:在关机或配置重新加载时,要等待多长时间冲洗样本。
- --storage.remote.read-sample-limit=5e7:在单个查询中,通过远程读取接口返回的最大样本总数。0表示无限制。对于流响应类型,此限制将被忽略。仅与服务器模式一起使用。
- --storage.remote.read-concurrent-limit=10:最大并发远程读调用数。0表示无限制。仅与服务器模式一起使用。
- --storage.remote.read-max-bytes-in-frame=1048576:在编组之前,单个帧中用于流远程读响应类型的最大字节数。注意客户端可能也有帧大小的限制。默认为protobuf推荐的1MB。仅与服务器模式一起使用。
- --rules.alert.for-outage-tolerance=1h:恢复“for”警报状态所需忍受普罗米修斯中断的最长时间。仅与服务器模式一起使用。
- --rules.alert.for-grace-period=10m:警报和恢复“for”状态之间的最短间隔时间。仅对配置的“for”时间大于宽限期的警报进行维护。仅与服务器模式一起使用。
- --rules.alert.resend-delay=1m:在向Alertmanager重发警报之前等待的最短时间。仅与服务器模式一起使用。
- --alertmanager.notification-queue-capacity=10000:挂起的Alertmanager通知队列的容量。仅与服务器模式一起使用。
- --query.lookback-delta=5m:表达式计算和联合期间检索度量的最大回看持续时间。仅与服务器模式一起使用。
- --query.timeout=2m:查询在中止前可能需要的最长时间。仅与服务器模式一起使用。
- --query.max-concurrency=20:并发执行的最大查询数。仅与服务器模式一起使用。
- --query.max-samples=50000000:单个查询可以加载到内存中的最大样本数量。注意,如果查询试图将更多的样本加载到内存中,则会失败,因此这也限制了查询可以返回的样本数量。仅与服务器模式一起使用。
- --enable-feature= ...:用逗号分隔要启用的特性名称。有效选项:agent, exemplar-storage, expand-external-labels, memory-snapshot-on-shutdown, promql-at-modifier, promql-negative-offset, promql-per-step-stats, remote-write-receiver (DEPRECATED), extra-scrape-metrics, new-service-discovery-manager, auto-gomaxprocs。See https://prometheus.io/docs/prometheus/latest/feature_flags/ for more details.
- --log.level=info:只记录具有给定严重性或以上级别的消息。One of: [debug, info, warn, error]
- --log.format=logfmt:日志信息的输出格式。One of: [logfmt, json]
5、启动Prometheus
//通知systemd重新加载配置文件 ]# systemctl daemon-reload ]# systemctl enable prometheus.service ]# systemctl start prometheus.service ]# systemctl status prometheus.service
6、验证Prometheus是否安装成功
- 通过浏览器使用Prometheus Web UI.
- http://10.1.1.11:9090/
- 打开表达式浏览器。
- http://10.1.1.11:9090/graph
- 查看prometheus服务器本身提供的指标(Prometheus本身是自带导出器(exporter)的,现在可以在Web UI中查看exporter采集到具体数据)。
- http://10.1.1.11:9090/metrics
- 查看Targets信息(默认仅对Prometheus本机进行监控)
- http://10.1.1.11:9090/targets
2、prometheus.yml文件
2.1、配置Prometheus.yml文件
- Prometheus通过YAML文件来配置。
- 当运行prometheus二进制文件时,会指定一个配置文件。Prometheus自带默认的配置文件prometheus.yml(在压缩包中)。
- 默认配置文件有4个YAML块:global、alerting、rule_files和scrape_configs。
- 配置说明:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
//已从配置文件中删除了一些注释。默认文件可能会发生变化,因此与你的默认配置文件可能不完全相同。 ]# cat /apps/prometheus/prometheus.yml global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: # - "first_rules.yml" # - "second_rules.yml" scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"]
1、global
- 配置文件的第一部分是global,它包含了控制Prometheus服务器行为的全局配置。
- scrape_interval:用来指定到应用程序或服务抓取数据的时间间隔(默认60s)。时间序列的颗粒度
- 在从特定位置收集指标时,有可能会覆盖全局抓取间隔。强烈建议不要这么做!
- 在服务器上保持一个全局抓取间隔,可以确保所有时间序列具有相同的颗粒度,并且可以组合在一起计算。
- 如果使用了不同的数据间隔来收集数据时,则可能产生不合逻辑的结果。
- 注意,强烈建议仅设置抓取间隔为全局参数以保持颗粒度一致!
- 在从特定位置收集指标时,有可能会覆盖全局抓取间隔。强烈建议不要这么做!
- evaluation_interval:用来指定Prometheus评估规则的频率(默认60s)。
- 目前主要有两种规则:记录规则(recording rule)和警报规则(alerting rule)。
- 记录规则:允许预先计算使用频繁且开销大的表达式,并将结果保存为一个新的时间序列数据。
- 警报规则:允许定义警报条件。
- 目前主要有两种规则:记录规则(recording rule)和警报规则(alerting rule)。
2、alerting
- 配置文件的第二部分是alerting,它用来设置Prometheus的告警。
- 告警是由Alertmanager工具进行管理的。Alertmanager是一个可以集群化的独立告警管理工具。
- 在默认配置中,alerting部分包含服务器的告警配置,alertmanagers块会列出Prometheus服务器使用的每个Alertmanager,static_configs块表示手动在targets数组中配置的Alertmanager。
- Prometheus还支持Alertmanager的服务发现功能。例如,你可以通过查询外部源(如Consul服务器)来返回可用的Alertmanager列表,而不是单独指定每个Alertmanager。
3、rule_files
- 配置文件的第三部分是rule_files,它用来指定包含记录规则或告警规则的文件列表。
4、scrape_configs
- 配置文件的最后一部分是scrape_configs,用来指定Prometheus抓取的所有目标。
- Prometheus将它抓取的指标的数据源称为端点(endpoint)。
- 为了抓取这些端点的数据,Prometheus定义了一个目标(target),这个目标里包含的信息是抓取数据所必需的,比如用到的标签、建立连接所需的身份验证,或者其他定义数据抓取的信息。
- 若干目标构成的组称为作业(job)。
- 作业里每个目标都有一个名为实例(instance)的标签,用来唯一标识这个目标。
- 默认配置中定义了一个作业prometheus,它的static_configs参数部分列出了抓取的目标,这些特定的目标被单独列出来,而不是通过自动服务发现。你也可以将静态配置理解为手动或人工服务发现。
- 默认配置中,作业prometheus只有一个监控目标:Prometheus服务器自身。
- 它从本地的9090端口抓取数据,该端口返回服务器的健康指标。
- Prometheus默认指标将在/metrics路径上返回,因此它会到http://localhost:9090/metrics上抓取指标。
- scrape_configs主要参数:
- job_name:全局唯一名称。
- scrape_interval:默认等于global内设置的参数值,设置后可以覆盖global中的值。
- scrape_timeout:默认等于global内设置的参数值。
- metrics_path:从targets获取metric的HTTP资源路径,默认是/metrics。
- honor_labels:Prometheus如何处理标签之间的冲突。若设置为"true",则通过保留标签来解决标签冲突进行数据值采集。若设置为"false",则通过重命名来解决标签冲突,以exported_<original-label>格式采集数据值,例如exported_job形式,默认是"false"。
- scheme:用于请求的协议方式,默认是http。
- params:数据采集访问时HTTP URL设定的请求参数。
- relabel_configs:采集数据重置标签配置。
- metric_relabel_configs:metric重置标签配置。
- sample_limit:对每个被已知样本(sample)数量的每次采集进行限制,如果超过限制,该数据将被视为失败。默认值为0,表示无限制。
2.2、加载prometheus.yml文件
- 有两种方法加载prometheus文件:
- 启动时加载
- 动态加载
1、动态加载prometheus.yml文件
- 动态加载prometheus.yml文件一般有两种方法:
//通过发送SIGHUP信号,重新加载配置文件但不停止服务 ]# kill -HUP PID //通过HTTP API发送post请求到/-/reload,需要在启动Prometheus服务时指定--web.enable-lifecycle参数 ]# curl -X POST http://localhost:9090/-/reload
2、检查prometheus.yml文件
promtool check config /apps/prometheus/prometheus.yml
1
# #