使用代理将Omnibus GitLab的exporter集成到外部的Prometheus进行监控

由于我是第一次写,请轻点批评~

GitLab内置了Prometheus和各种导出器,但是如果要从外部的Prometheus访问,就需要对每个导出器进行单独配置。为了省事起见,可以使用exporter-exporter(导出器代理)进行操作。

※ 诚实地说,无论选择哪一种方式,所需的工作量都是一样的。

如果你不太想在防火墙上开放太多的端口,这可能是一个好选择。

最终配置

    • Ubuntu (GitLab用)

GitLab Omnibus
exporter-exporter (systemdで管理)
その他お好みでExporter

Ubuntu(監視用)

Prometheus
alertmanager
Grafana

请参考官方文档或前辈们的文章,关于GitLab Omnibus的安装并没有在这里提及。

如果在exporter_exporter等情况下不通过反向代理使用gitlab.rb的*_exporter[‘listen-address’] = localhost:*,则需要编辑该文件,并允许外部prometheus主机的设置。

请参考

GitLab 的配置文件

禁用内置的Prometheus, alertmanager和Grafana。

$ vim /etc/gitlab/gitlab.rb
# ...前略

################################################################################
## Prometheus
##! Docs: https://docs.gitlab.com/ee/administration/monitoring/prometheus/
################################################################################

# ...中略

prometheus['enable'] = false

# ...中略

################################################################################
## Prometheus Alertmanager
################################################################################

alertmanager['enable'] = false

# ...中略

################################################################################
## Grafana Dashboards
##! Docs: https://docs.gitlab.com/ee/administration/monitoring/prometheus/#prometheus-as-a-grafana-data-source
################################################################################

grafana['enable'] = false

# ...後略

出口商-出口商

GitHub 的中文释义是”代码托管平台”。

从发布到下载

这次是Ubuntu操作系统,所以使用的是linux-amd64版本。

# DLして解凍
$ wget https://github.com/QubitProducts/exporter_exporter/releases/download/v0.4.5/exporter_exporter-0.4.5.linux-amd64.tar.gz
$ tar xf exporter_exporter-0.4.5.linux-amd64.tar.gz

将二进制文件放置

$ cp ./exporter_exporter-0.4.5.linux-amd64/exporter_exporter /usr/local/bin

创建config文件

由于本次使用的是gitlab-ce,所以我已经将pgbouncer_exporter注释掉了。

$ vim /etc/prometheus/expexp.yml
modules:

  ################################################################################
  ## Managed by GitLab Omnibus
  ################################################################################

  redis:
    method: http
    http:
      port: 9121
  postgres:
    method: http
    http:
      port: 9187
  node:
    method: http
    http:
      port: 9100
  gitlab-workhorse:
    method: http
    http:
      port: 9229
  gitlab-rails:
    method: http
    http:
      port: 8080
      path: '/-/metrics'
  gitlab-sidekiq:
    method: http
    http:
      port: 8082
  gitlab_exporter_database:
    method: http
    http:
      port: 9168
      path: '/database'
  gitlab_exporter_sidekiq:
    method: http
    http:
      port: 9168
      path: '/sidekiq'
  gitlab_exporter_ruby:
    method: http
    http:
      port: 9168
      path: '/ruby'
  gitaly:
    method: http
    http:
      port: 9236
  # pgbouncer:
  #   method: http
  #   http:
  #     port: 9188

使用systemd进行管理

Unit 文件

$ vim /lib/systemd/system/prometheus-exporter-exporter.service
[Unit]
Description=Exporter Exporter - prometheus exporter proxy
Documentation=https://github.com/QubitProducts/exporter_exporter
After=network-online.target

[Service]
ExecStart=/usr/local/bin/exporter_exporter -config.file '/etc/prometheus/expexp.yaml'
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}

[Install]
WantedBy=multi-user.target

进行

# Unitファイルを読み込ませる
$ systemctl daemon-reload

# 実行
$ systemctl start prometheus-exporter-exporter.service
$ systemctl status prometheus-exporter-exporter.service
$ curl localhost:9999

<h2>Exporters:</h2>
<ul>
  <li><a href="/proxy?module=gitaly">gitaly</a></li>
  <li><a href="/proxy?module=gitlab-rails">gitlab-rails</a></li>
  <li><a href="/proxy?module=gitlab-sidekiq">gitlab-sidekiq</a></li>
  <li><a href="/proxy?module=gitlab-workhorse">gitlab-workhorse</a></li>
  <li><a href="/proxy?module=gitlab_exporter_database">gitlab_exporter_database</a></li>
  <li><a href="/proxy?module=gitlab_exporter_ruby">gitlab_exporter_ruby</a></li>
  <li><a href="/proxy?module=gitlab_exporter_sidekiq">gitlab_exporter_sidekiq</a></li>
  <li><a href="/proxy?module=node">node</a></li>
  <li><a href="/proxy?module=postgres">postgres</a></li>
  <li><a href="/proxy?module=redis">redis</a></li>
</ul>

您可以通过标签的URI来查看每个导出器的度量标准。

普罗米修斯

在接下来,我们会在一个专为监控而建的主机上进行构建,而不是在运行GitLab的主机上。

$ apt install prometheus alertmanager
$ vim /etc/prometheus/prometheus.yml

请将gitlab.example.com替换为安装了GitLab和exporter_exporter的主机的域名或IP地址。

global:
  scrape_interval: 15s
  scrape_timeout: 15s
  external_labels: {}

remote_read: []
remote_write: []
rule_files: []

alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - 127.0.0.1:9093

scrape_configs:
  ################################################################################
  ## Prometheus
  ################################################################################

  - job_name: prometheus
    static_configs:
      - targets:
          - 127.0.0.1:9090

  ################################################################################
  ## Managed by gitlab-ce
  ################################################################################

  - job_name: redis
    metrics_path: /proxy
    params:
      module:
        - redis
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: postgres
    metrics_path: /proxy
    params:
      module:
        - postgres
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: node
    metrics_path: /proxy
    params:
      module:
        - node
    static_configs:
      - targets:
        - gitlab.example.com:9999
  - job_name: gitlab-workhorse
    metrics_path: /proxy
    params:
      module:
        - gitlab-workhorse
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: gitlab-rails
    metrics_path: /proxy
    params:
      module:
        - gitlab-rails
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: gitlab-sidekiq
    metrics_path: /proxy
    params:
      module:
        - gitlab-sidekiq
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: gitlab_exporter_database
    metrics_path: /proxy
    params:
      module:
        - gitlab_exporter_database
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: gitlab_exporter_sidekiq
    metrics_path: /proxy
    params:
      module:
        - gitlab_exporter_sidekiq
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: gitlab_exporter_ruby
    metrics_path: /proxy
    params:
      module:
        - gitlab_exporter_ruby
    static_configs:
      - targets:
          - gitlab.example.com:9999
  - job_name: gitaly
    metrics_path: /proxy
    params:
      module:
        - gitaly
    static_configs:
      - targets:
          - gitlab.example.com:9999
  # - job_name: pgbouncer
  #   metrics_path: /proxy
  #   params:
  #     module:
  #       - pgbouncer
  #   static_configs:
  #     - targets:
  #         - gitlab.example.com:9999
$ systemctl restart prometheus

监视本身在这方面完成!

Grafana 可以用中文翻译为 “格拉法纳”

$ apt install grafana

将仪表盘迁移至其他地方

在GitLab Omnibus的Grafana中已经准备了仪表板,因此我们将对它们进行修改并移植。

原始文件的位置
– /var/opt/gitlab/provisioning
– /opt/gitlab/embedded/service/grafana-dashboards

将数据源和仪表盘定义文件放置在/etc/grafana/provisioning中,配置如下。

GitHub -> GitHub (GitHub)

将PromQL实例的端口指定更改为用于exporter_exporter的9999端口。

/etc/grafana
└── provisioning
    ├── dashboard_options
    │   └── gitlab_omnibus
    │       ├── gitaly.json
    │       ├── overview.json
    │       ├── postgresql.json
    │       ├── rails-app.json
    │       ├── redis.json
    │       └── service_platform_metrics.json
    ├── dashboards
    │   └── gitlab_dashboards.yml
    └── datasources
       └── gitlab_datasources.yml
$ systemctl restart grafana-server.service
image.png

搬移完成啦!

GitLab Omnibus中包含了许多内置组件,每个组件都有许多配置文件,这让我找寻它们非常有趣!

参考/仓库

使用Prometheus监控GitLab。

量子比特产品/出口商_出口商

广告
将在 10 秒后关闭
bannerAds