1. # 全局配置
    2. global:
    3. scrape_interval: 15s # 多久 收集 一次数据
    4. evaluation_interval: 30s # 多久评估一次 规则
    5. scrape_timeout: 10s # 每次 收集数据的 超时时间
    6. # 当Prometheus和外部系统(联邦, 远程存储, Alertmanager)通信的时候,添加标签到任意的时间序列或者报警
    7. external_labels:
    8. monitor: codelab
    9. foo: bar
    10. # 规则文件, 可以使用通配符
    11. rule_files:
    12. - "first.rules"
    13. - "my/*.rules"
    14. # 远程写入功能相关的设置
    15. remote_write:
    16. - url: http://remote1/push
    17. write_relabel_configs:
    18. - source_labels: [__name__]
    19. regex: expensive.*
    20. action: drop
    21. - url: http://remote2/push
    22. # 远程读取相关功能的设置
    23. remote_read:
    24. - url: http://remote1/read
    25. read_recent: true
    26. - url: http://remote3/read
    27. read_recent: false
    28. required_matchers:
    29. job: special
    30. # 收集数据 配置 列表
    31. scrape_configs:
    32. - job_name: prometheus # 必须配置, 自动附加的job labels, 必须唯一
    33. honor_labels: true # 标签冲突, true 为以抓取的数据为准 并 忽略 服务器中的, false 为 通过重命名来解决冲突
    34. # scrape_interval is defined by the configured global (15s).
    35. # scrape_timeout is defined by the global default (10s).
    36. metrics_path: '/metrics'
    37. # scheme defaults to 'http'.
    38. # 文件服务发现配置 列表
    39. file_sd_configs:
    40. - files: # 从这些文件中提取目标
    41. - foo/*.slow.json
    42. - foo/*.slow.yml
    43. - single/file.yml
    44. refresh_interval: 10m # 刷新文件的 时间间隔
    45. - files:
    46. - bar/*.yaml
    47. # 使用job名作为label的 静态配置目录 的 列表
    48. static_configs:
    49. - targets: ['localhost:9090', 'localhost:9191']
    50. labels:
    51. my: label
    52. your: label
    53. # 目标节点 重新打标签 的配置 列表. 重新标记是一个功能强大的工具,可以在抓取目标之前动态重写目标的标签集。 可以配置多个,按照先后顺序应用
    54. relabel_configs:
    55. - source_labels: [job, __meta_dns_name] # 从现有的标签中选择源标签, 最后会被 替换, 保持, 丢弃
    56. regex: (.*)some-[regex] # 正则表达式, 将会提取source_labels中匹配的值
    57. target_label: job # 在替换动作中将结果值写入的标签.
    58. replacement: foo-${1} # 如果正则表达匹配, 那么替换值. 可以使用正则表达中的 捕获组
    59. # action defaults to 'replace'
    60. - source_labels: [abc] # 将abc标签的内容复制到cde标签中
    61. target_label: cde
    62. - replacement: static
    63. target_label: abc
    64. - regex:
    65. replacement: static
    66. target_label: abc
    67. bearer_token_file: valid_token_file # 可选的, bearer token 文件的信息
    68. - job_name: service-x
    69. # HTTP basic 认证信息
    70. basic_auth:
    71. username: admin_name
    72. password: "multiline\nmysecret\ntest"
    73. scrape_interval: 50s # 对于该job, 多久收集一次数据
    74. scrape_timeout: 5s
    75. sample_limit: 1000 # 每次 收集 样本数据的限制. 0 为不限制
    76. metrics_path: /my_path # 从目标 获取数据的 HTTP 路径
    77. scheme: https # 配置用于请求的协议方案
    78. # DNS 服务发现 配置列表
    79. dns_sd_configs:
    80. - refresh_interval: 15s
    81. names: # 要查询的DNS域名列表
    82. - first.dns.address.domain.com
    83. - second.dns.address.domain.com
    84. - names:
    85. - first.dns.address.domain.com
    86. # refresh_interval defaults to 30s.
    87. # 目标节点 重新打标签 的配置 列表
    88. relabel_configs:
    89. - source_labels: [job]
    90. regex: (.*)some-[regex]
    91. action: drop
    92. - source_labels: [__address__]
    93. modulus: 8
    94. target_label: __tmp_hash
    95. action: hashmod
    96. - source_labels: [__tmp_hash]
    97. regex: 1
    98. action: keep
    99. - action: labelmap
    100. regex: 1
    101. - action: labeldrop
    102. regex: d
    103. - action: labelkeep
    104. regex: k
    105. # metric 重新打标签的 配置列表
    106. metric_relabel_configs:
    107. - source_labels: [__name__]
    108. regex: expensive_metric.*
    109. action: drop
    110. - job_name: service-y
    111. # consul 服务发现 配置列表
    112. consul_sd_configs:
    113. - server: 'localhost:1234' # consul API 地址
    114. token: mysecret
    115. services: ['nginx', 'cache', 'mysql'] # 被检索目标的 服务 列表. 如果不定义那么 所有 服务 都会被 收集
    116. scheme: https
    117. tls_config:
    118. ca_file: valid_ca_file
    119. cert_file: valid_cert_file
    120. key_file: valid_key_file
    121. insecure_skip_verify: false
    122. relabel_configs:
    123. - source_labels: [__meta_sd_consul_tags]
    124. separator: ','
    125. regex: label:([^=]+)=([^,]+)
    126. target_label: ${1}
    127. replacement: ${2}
    128. - job_name: service-z
    129. # 收集 数据的 TLS 设置
    130. tls_config:
    131. cert_file: valid_cert_file
    132. key_file: valid_key_file
    133. bearer_token: mysecret
    134. - job_name: service-kubernetes
    135. # kubernetes 服务 发现 列表
    136. kubernetes_sd_configs:
    137. - role: endpoints # 必须写, 必须是endpoints, service, pod, node, 或者 ingress
    138. api_server: 'https://localhost:1234'
    139. basic_auth: # HTTP basic 认证信息
    140. username: 'myusername'
    141. password: 'mysecret'
    142. - job_name: service-kubernetes-namespaces
    143. kubernetes_sd_configs:
    144. - role: endpoints # 应该被发现的 kubernetes 对象 实体
    145. api_server: 'https://localhost:1234' # API Server的地址
    146. namespaces: # 可选的命名空间发现, 如果省略 那么所有的命名空间都会被使用
    147. names:
    148. - default
    149. - job_name: service-marathon
    150. # Marathon 服务发现 列表
    151. marathon_sd_configs:
    152. - servers:
    153. - 'https://marathon.example.com:443'
    154. tls_config:
    155. cert_file: valid_cert_file
    156. key_file: valid_key_file
    157. - job_name: service-ec2
    158. ec2_sd_configs:
    159. - region: us-east-1
    160. access_key: access
    161. secret_key: mysecret
    162. profile: profile
    163. - job_name: service-azure
    164. azure_sd_configs:
    165. - subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11
    166. tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2
    167. client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33C
    168. client_secret: mysecret
    169. port: 9100
    170. - job_name: service-nerve
    171. nerve_sd_configs:
    172. - servers:
    173. - localhost
    174. paths:
    175. - /monitoring
    176. - job_name: 0123service-xxx
    177. metrics_path: /metrics
    178. static_configs:
    179. - targets:
    180. - localhost:9090
    181. - job_name: 測試
    182. metrics_path: /metrics
    183. static_configs:
    184. - targets:
    185. - localhost:9090
    186. - job_name: service-triton
    187. triton_sd_configs:
    188. - account: 'testAccount'
    189. dns_suffix: 'triton.example.com'
    190. endpoint: 'triton.example.com'
    191. port: 9163
    192. refresh_interval: 1m
    193. version: 1
    194. tls_config:
    195. cert_file: testdata/valid_cert_file
    196. key_file: testdata/valid_key_file
    197. # Alertmanager相关的配置
    198. alerting:
    199. alertmanagers:
    200. - scheme: https
    201. static_configs:
    202. - targets:
    203. - "1.2.3.4:9093"
    204. - "1.2.3.5:9093"
    205. - "1.2.3.6:9093"

    配置修改后从新加载配置:

    启动参数加上enable-lifecycle
    docker run --name prometheus -d -p 9090:9090 --restart=always -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /opt/prometheus/rules.yml:/opt/prometheus/rules.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
    
    
    # 第一种,向prometheus进行发信号
    kill -HUP  pid
    
    # 第二种,向prometheus发送HTTP请求
    # /-/reload只接收POST请求,并且需要在启动prometheus进程时,指定 --web.enable-lifecycle
    curl -XPOST http://prometheus.chenlei.com/-/reload
    

    显示如下内容即重启成功
    image.png