V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
panisertoller
V2EX  ›  云计算

基于腾讯云 Lighthouse 自建 Grafana 和 Prometheus 服务

  •  
  •   panisertoller · 2023-10-25 22:08:25 +08:00 · 1110 次点击
    这是一个创建于 405 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Kubernetes 是一种强大的容器编排系统,它使您能够轻松地部署、管理和扩展容器化应用程序。在监控和可视化方面,Grafana 和 Prometheus 是两个非常有用的工具。本文将引导读者朋友们在 Kubernetes 集群上安装和配置 Grafana 和 Prometheus 。

    前言

    当在 Kubernetes 集群上安装 Grafana 和 Prometheus 之前,让我们首先了解一下这两个工具的基本概念和功能。

    Grafana

    Grafana 的主要作用是帮助用户将监控数据可视化,从而更容易理解应用程序和系统的性能、健康状况以及趋势。它提供了一个用户友好的界面,可以让用户创建漂亮和有用的监控仪表板,用于监视和分析数据。当与 Prometheus 等数据源集成时,Grafana 可以展示 Prometheus 采集到的数据。

    Prometheus

    Prometheus 是一个开源的监控和警报工具,最初由 SoundCloud 开发并开源。其工作原理是定期从各种目标(如应用程序、容器、操作系统、数据库等)中抓取指标数据,存储在本地数据库中,并提供查询和警报功能。这种方式使得 Prometheus 适合于云原生环境和容器化应用程序的监控。

    准备 Kubernetes 集群

    Lighthouse 是腾讯云推出的一款轻量应用服务器产品,它提供了高性价比、高可用性、高安全性和高灵活性的云端计算服务。具体信息参阅官方文档:轻量应用服务器概述

    为了部署 Grafana 和 Prometheus 服务,我们需要购买一台轻量应用服务器,并配置好相关的环境和依赖。购买步骤参见官方文档:使用轻量应用服务器一键创建应用应用类型请选择**k3s**。

    创建 kubernetes 部署配置文件

    1 、将下面的代码保存为grafpro.yaml,可根据实际修改部分参数,或使用后文的脚本自动修改。

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: &name grafpro
      labels:
        app: *name
    spec:
      selector:
        matchLabels:
          app: *name
      template:
        metadata:
          labels:
            app: *name
        spec:
          containers:
            - name: grafana
              image: grafana/grafana
              securityContext:
                runAsUser: 0
              ports:
                - containerPort: 3000
              volumeMounts:
                - name: *name
                  subPath: grafana
                  mountPath: /var/lib/grafana
            - name: prometheus
              image: prom/prometheus
              securityContext:
                runAsUser: 0
              ports:
                - containerPort: 9090
              volumeMounts:
                - name: *name
                  subPath: etc
                  mountPath: /etc/prometheus
                - name: *name
                  subPath: prometheus
                  mountPath: /prometheus
          volumes:
            - name: *name
              hostPath:
                path: /srv/grafpro
                type: DirectoryOrCreate
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: &name grafpro
      labels:
        app: *name
    spec:
      selector:
        app: *name
      ports:
        - name: grafana
          port: 3000
          targetPort: 3000
        - name: prometheus
          port: 9090
          targetPort: 9090
    ---
    kind: Ingress
    apiVersion: networking.k8s.io/v1
    metadata:
      name: &name grafpro
      annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
    spec:
      rules:
        - host: grafana.example.org
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: *name
                    port:
                      name: grafana
        - host: prometheus.example.org
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: *name
                    port:
                      name: prometheus
      tls:
        - secretName: default
    

    2 、将下面的代码保存为grafpro.sh,请注意修改GRAFPRO_STORAGEGRAFPRO_DOMAINPROMETHEUS_DOMAIN变量的值。

    export GRAFPRO_STORAGE=${GRAFPRO_STORAGE:-"/srv/grafpro"}
    
    export GRAFANA_DOMAIN=${GRAFPRO_DOMAIN:-"grafana.example.org"}
    export PROMETHEUS_DOMAIN=${PROMETHEUS_DOMAIN:-"grafana.example.org"}
    
    mkdir -p $GRAFPRO_STORAGE/etc
    
    cat <<EOF >$GRAFPRO_STORAGE/etc/prometheus.yml
    global:
      scrape_interval: 5s
      scrape_timeout: 5s
      evaluation_interval: 15s
    
    scrape_configs:
      - job_name: prometheus
        static_configs:
          - targets:
              - 127.0.0.1:9090
    EOF
    
    cat grafpro.yaml \
        | sed "s#/srv/grafpro#$GRAFPRO_STORAGE#g" \
        | sed "s#grafana.example.org#$GRAFANA_DOMAIN#g" \
        | sed "s#prometheus.example.org#$PROMETHEUS_DOMAIN#g" \
        | kubectl apply -f -
    

    3 、将grafpro.yamlgrafpro.sh文件上传到 k8s 主服务器上的同一目录内。注意检查grafpro.sh文件的换行是否为LF,否脚本可能无法执行。

    部署 Grafana 和 Prometheus

    通过 ssh 登录服务器,执行以下命令,部署 Grafana 和 Prometheus 服务。

    chmod +x grafpro.sh
    ./grafpro.sh
    

    测试和验证

    Grafana

    1 、浏览器打开http://grafana.example.org,使用用户名admin和密码admin登录,此时会提示修改一个新的密码,修改后将自动转入控制台页面。

    2 、浏览器打开http://grafana.example.org/connections/datasources/edit/bc3e3d0a-090a-469f-8c25-f93818410784,在Prometheus server URL输入框内填入http://127.0.0.1:9090,点击Save & Test后保存。

    3 、浏览器打开http://grafana.example.org/connections/datasources/edit/bc3e3d0a-090a-469f-8c25-f93818410784/dashboards,导入Prometheus 2.0 Stats仪表盘。

    测试图表

    Prometheus

    浏览器打开http://prometheus.example.org,无需登录即可使用查询面板。生产环境建议至少添加Basic Auth认证,防止数据泄露。

    运行状态

    写在最后

    本文介绍了如何安装 Grafana 和 Prometheus ,并未添加数据采集器(exporter),我将分为不同的章节为大家一一介绍常用的数据采集器。请大家收藏若海の技术写真,关注后续的章节。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1018 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:39 · PVG 05:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.