kong-exporter和prometheus部署和配置

prometheus修改配置不需要停掉,只要修改yml之后用docker restart重启

启动数据库

docker run --name postgres_name -e POSTGRES_PASSWORD=123456 -p 54321:5432 -d postgres:9.6.19

部署prometheus

  1. 使用root,在/opt/dcprometheus文件夹下,创建prometheus.yml文件。
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    ## MUST
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'kong'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    ## MUST
    static_configs:
    - targets: ['192.168.200.137:8091']
  1. 在用户目录下创建文件夹dcprometheus,在dcprometheus下创建文件docker-compose.yml
version: '3'

services:
    dc-prometheus:
        image: prom/prometheus:v2.13.1
        container_name: dc-prometheus
        networks:
            - kong-net
        ports:
            - "9090:9090"
        volumes:
            - /opt/dcprometheus/prometheus.yml:/etc/prometheus/prometheus.yml
            - /etc/localtime:/etc/localtime
        restart: always

networks:
    kong-net:
        driver: bridge
  1. 使用docker-compose up -d命令,用docker ps检查是否部署成功,打开:9090页面看target是否正常运行。

kong/kong-export/prometheus打通

安装插件 http-logs —— kong-exporter与kong打通

curl -X POST http://192.168.200.137:8001/plugins/
–data “name=http-log”
–data “config.http_endpoint=http://192.168.200.137:8998/apike/v1/kong”
–data “config.method=POST”
–data “config.timeout=1000”
–data “config.keepalive=1000”

curl -X POST http://192.168.200.137:8001/plugins/
–data “name=http-log”
–data “config.http_endpoint=http://192.168.200.137:8091/apike/v1/kong”
–data “config.method=POST”
–data “config.timeout=1000”
–data “config.keepalive=1000”

curl -X POST http://192.168.400.71:8001/plugins/
–data “name=http-log”
–data “config.http_endpoint=http://192.168.400.70:30671/apike/v1/kong”
–data “config.method=POST”
–data “config.timeout=1000”
–data “config.keepalive=1000”

curl -X POST http://192.168.400.72:8001/plugins/
–data “name=http-log”
–data “config.http_endpoint=http://10.12.6.24:31691/apike/v1/kong”
–data “config.method=POST”
–data “config.timeout=1000”
–data “config.keepalive=1000”

kong-exporter与prometheus打通

  1. 修改/opt/dcprometheus/prometheus.yml文件,kong-exporter的IP和端口号。重启prometheus
cd /opt/dcprometheus
sudo su
vim prometheus.yml
  1. kong-exporter的app.conf设置prometheus的地址

kong配置services/routes/consumers

services

curl -i -X POST
–url http://192.168.200.137:8001/services/
–data ‘name=example-service’
–data ‘url=http://mockbin.org’

curl -i -X POST
–url http://192.168.200.137:8001/services/
–data ‘name=monitor_metrics’
–data ‘url=http://192.168.232.137:8091/metrics’

curl -i -X POST
–url http://192.168.400.71:8001/services/
–data ‘name=monitor_httpbin’
–data ‘url=http://httpbin.org/get’

curl -i -X POST
–url http://192.168.400.71:8001/services/
–data ‘name=monitor_metrics’
–data ‘url=http://192.168.400.71:8080/metrics’

curl -i -X POST
–url http://192.168.400.72:8001/services/
–data ‘name=monitor_metrics’
–data ‘url=http://192.168.400.72:8080/metrics’

routes

curl -i -X POST
–url http://192.168.200.137:8001/services/example-service/routes
–data ‘hosts[]=192.168.200.137’
–data ‘paths[]=/test’

curl -i -X POST
–url http://192.168.200.137:8001/services/monitor_metrics/routes
–data ‘hosts[]=192.168.200.137’
–data ‘name=monitor_getmetrics’
–data ‘paths[]=/metrics’

curl -i -X POST
–url http://192.168.200.137:8001/services/example-service/routes
–data ‘hosts[]=192.168.200.137’
–data ‘paths[]=/testroute’

curl -i -X POST
–url http://192.168.200.137:8001/services/example-service/routes
–data ‘hosts[]=192.168.200.137’
–data ‘paths[]=/anotherroute’

curl -i -X DELETE
–url http://192.168.200.137:8001/services/example-service/routes/aafb73dc-323d-460a-9fc0-e1eda0e93c76

curl -i -X POST
–url http://192.168.400.71:8001/services/monitor_httpbin/routes
–data ‘hosts[]=192.168.400.71’
–data ‘name=monitor_get’
–data ‘paths[]=/get’

curl -i -X POST
–url http://192.168.400.71:8001/services/monitor_metrics/routes
–data ‘hosts[]=192.168.400.71’
–data ‘name=monitor_getmetrics’
–data ‘paths[]=/metrics’

curl -i -X POST
–url http://192.168.400.72:8001/services/monitor_metrics/routes
–data ‘hosts[]=192.168.400.72’
–data ‘name=monitor_getmetrics’
–data ‘paths[]=/metrics’

consumers

curl -i -X POST
–url http://192.168.200.137:8001/consumers
–data ‘username=user1’
–data ‘custom_id=appinstance001’

curl -i -X POST
–url http://192.168.200.137:8001/consumers
–data ‘username=user2’
–data ‘custom_id=appinstance002’

curl -i -X POST
–url http://192.168.400.71:8001/consumers
–data ‘username=monitor_user1’
–data ‘custom_id=monitor_appinstance001’

curl -i -X POST
–url http://192.168.400.71:8001/consumers
–data ‘username=monitor_user2’
–data ‘custom_id=monitor_appinstance002’

curl -i -X POST
–url http://192.168.400.72:8001/consumers
–data ‘username=monitor_user1’
–data ‘custom_id=monitor_appinstance001’

plugins 为服务安装key-auth插件

curl -i -X POST
–url http://192.168.200.137:8001/services/example-service/plugins/
–data ‘name=key-auth’

curl -i -X POST
–url http://192.168.200.137:8001/services/monitor_metrics/plugins/
–data ‘name=key-auth’

curl -i -X POST
–url http://192.168.400.71:8001/services/monitor_metrics/plugins/
–data ‘name=key-auth’

curl -i -X POST
–url http://192.168.400.72:8001/services/monitor_metrics/plugins/
–data ‘name=key-auth’

添加key

curl -i -X POST
–url http://192.168.200.137:8001/consumers/user1/key-auth/
–data ‘key=123456-asdfg’

curl -i -X POST
–url http://192.168.200.137:8001/consumers/user2/key-auth/
–data ‘key=67890-zxcv’

curl -i -X POST
–url http://192.168.400.71:8001/consumers/monitor_user1/key-auth/
–data ‘key=monitor_user1’

curl -i -X POST
–url http://192.168.400.71:8001/consumers/monitor_user2/key-auth/
–data ‘key=monitor_user2’

curl -i -X POST
–url http://192.168.400.72:8001/consumers/monitor_user1/key-auth/
–data ‘key=monitor_user1’

apis (废弃)

curl -i -X POST
–url http://localhost:8001/apis/
–data ‘name=example-api’
–data ‘hosts=example.com’
–data ‘upstream_url=http://www.baidu.com’

kong-exporter设计

metrics命名

  1. 前缀:单个词;对特定应用程序的度量通常前缀为应用程序名 kong_ http_(process_和scrape_前缀被保留。如果它们遵循匹配的语义,可以在这些前缀上添加自己的前缀。)
  2. 不能将label放在metrics命名中,例如by_type,因为如果标签被聚合在一起,则没有意义。(一个例外是,当您通过多个指标导出带有不同标签的相同数据时,在这种情况下,这通常是区分它们的最明智的方法。对于直接检测,仅当导出带有所有标签的单个度量标准的基数过高时,才应该出现这种情况。???)
  3. Prometheus度量标准和标签名称用编写snake_case
  4. 有效字符的数学模型:仅[a-zA-Z0-9:_]在度量标准名称中有效,任何其他字符都应清除为下划线。(冒号是为用户定义记录规则保留的,exporter不应该直接使用。)暴露的指标不应包含冒号,保留这些冒号供用户定义的记录规则在聚合时使用。
  5. 应表示在所有标签维度上测量的相同逻辑的事物。给定度量的所有维度上的sum()和avg()都是有意义的。
  6. 后缀:是以复数形式描述的单位,(info等除外)。
  7. 后缀之后:_sum,_count,_bucket和_total后缀由摘要,柱状图和计数器使用。除非您要制作其中之一,否则请避免使用这些后缀。(_total 是计数器的约定,如果使用COUNTER类型,则应使用它。)
  8. 不应在metrics上设置时间戳。时间由Prometheus做。
  9. 成功的请求计数和失败的请求计数,变为针对总请求的一个度量标准和针对失败请求的另一个度量标准。这使得计算故障率变得容易。
  10. 必须有一个单位,使用基本单位。

metries type

  1. counter(不下降):rate()获取每秒增加的速率
  2. gauge(可下降):状态快照
  3. summary //todo
  4. histogram //todu
  5. 默认值:UNTYPED(不知道用什么就默认)

metries help

  1. 转换metrics时,HELP中保留exporter名称/原始metrics名字和详细信息/转换规则
  2. 一个metries只能用一个hel

Label - 区分被测物特征

  1. 当您要添加/平均/求和多个指标时,它们通常应该是带有标签的一个指标,而不是多个指标。(以标签建立,而非实际的值建立。可以创建整体的指标,携带标签)
  2. 有效字符的数学模型:仅[a-zA-Z0-9:_]在Label中有效,以__开头的Label作为内部保留。
  3. 警惕过度使用:不使用标签存储基数多的值(基数10以下),如id等无边界的值集。每个label对应一个时间序列。基数超过100需要其他解决方案。请从没有label开始,随着具体用例的出现添加。
  4. 避免某些事件之后才出现的时间序列,请事先设置默认值如0.
  5. 避免使用type作为标签名。避免易冲突的命名:region, zone, cluster, availability_zone, az, datacenter, dc, owner, customer, stage, service, environment and env。(le 对histograms,quantile对summaries有特殊意义)
  6. 保证时序序列唯一性的最小的组合。避免将多个label放入同一个metrics,除非它们对该metrics有意义。多个指标更安全。可通过info metrics添加其他信息。
  7. 将read/write,send/receive作为不同的metrics,因为它们一般不会同时使用。
  8. 不可以在全部的metrics上应用相同的label

其他的数据模型 (时间序列)

Samples

  1. 实际时间序列数据,包括:一个 float64的值,毫秒精度的时间戳

Notation

  1. 表示时间序列:(与openTSDB相同,openTSDB开源监控系统,hbase存储)
{

promQL

  1. count(kong_http_con_status) by (consumer)
  2. count 只计算条数。sum会加和全部的value。

迷惑

kong-exporter重启为啥影响prometheus数据?

——kong-exporter metrics包含启动后某一时刻的累加数据(只有结果);prometheue存储的是定时拉取的metrics

你可能感兴趣的:(中间件等,kong,prometheus,docker)