likes
comments
collection
share

云原生-Grafana和Prometheus

作者站长头像
站长
· 阅读数 9

前言

B哥:“今年的互联网市场行情真烂,十个对话,五个不读,三个已读不回,剩下两个刷KPI。”

李晓得:“没有最烂,只有更烂,今天面试都已经要求达到全栈的能力了。”

B哥:“可不是,我去面试都让我干运维的活了。”

李晓得:“他让你干啥了?”

B哥:“他让我搭建Grafana和Prometheus做应用的可视化监控,要学的知识又增加了,好烦。”

李晓得:“你不懂,你要进步!”

从云原生说起

不得不说,自从容器化开始盛行,云原生成为了go语言发展的一大能力。那什么是云原生,网上一堆概念可以帮助你去理解。当然你也可能像我一样这么懒,让AI来帮助理解,毕竟最近AI的风越刮越大,都已经刮出了职业危机。(如果你已经理解概念,可以跳过下面这段

我:“请用老奶奶都能听得懂的语言告诉我什么叫'云原生'?”

某AI:“云原生是一种计算机科学的概念,它描述了一种构建和管理软件应用程序的方法。简单来说,云原生是为了更好地适应云计算环境而设计的一种应用开发和部署的方式。

传统的应用程序通常是在独立的服务器上运行的,而云原生则利用云计算的特性来提供更强大、灵活和可扩展的应用程序架构。云原生应用程序通常被设计成由许多小型的、自治的组件组成,这些组件可以独立地扩展和部署。这种方式使得应用程序更容易适应变化,并且具有更高的可靠性和弹性。

云原生应用程序通常采用容器化技术,例如Docker,来实现组件的隔离和部署。它还利用了微服务架构的思想,将应用程序划分为一系列独立的服务,每个服务专注于完成特定的功能。这种模块化的设计使得开发人员可以更快速地迭代和部署新功能,并且可以更好地处理故障和扩展需求。

云原生还包括自动化管理和监控的概念,通过使用容器编排工具(如Kubernetes)和自动化运维工具,可以更方便地管理和监控应用程序的运行状态。

总的来说,云原生是一种适应云计算环境的应用程序开发和部署方式,它能够提供更高的灵活性、可靠性和可扩展性,使得应用程序能够更好地适应现代化的云环境。”

我:“云原生包含哪些内容”

某AI:“云原生包含以下几个核心方面的内容:

  1. 容器化:云原生应用程序通常使用容器化技术(如Docker)来封装应用程序及其依赖项。容器化使得应用程序可以独立于底层的操作系统和硬件环境,在不同的平台上运行一致性,并且具有更好的可移植性和可重复性。
  2. 微服务架构:云原生应用程序倡导将应用程序拆分为一系列小型、自治的服务。每个服务专注于完成特定的功能,通过定义清晰的接口和协议进行通信。这种模块化的设计使得开发人员可以更灵活地开发、部署和维护应用程序,并且可以独立地扩展和替换不同的服务。
  3. 自动化管理与编排:云原生应用程序使用容器编排工具(如Kubernetes)来自动管理和部署容器化的应用程序。这些工具可以自动化地处理应用程序的扩展、负载均衡、容错和故障恢复等任务,简化了应用程序的管理和运维工作。
  4. 声明式配置和基础设施即代码:云原生倡导使用声明式的配置方式来定义应用程序的状态和所需的基础设施资源。通过使用基础设施即代码的概念,可以将应用程序的配置和基础设施的定义纳入版本控制系统,并实现自动化的部署和环境复制。
  5. 持续交付和持续部署:云原生应用程序的开发过程通常采用持续集成、持续交付和持续部署的方法。开发人员可以通过自动化的构建、测试和部署流程,快速地将新功能和修复发布到生产环境中,实现快速迭代和持续交付的目标。

这些方面共同构成了云原生的核心内容,使得应用程序可以更好地适应云计算环境,具备高可靠性、弹性和可扩展性,并且能够快速响应业务需求的变化。”

不得不说,某AI对于协助理解确实有很大的帮助,至少比国内某搜索引擎好用得多(绝对不是你认识的那个搜索引擎)

再来一些概念

Grafana是一个开源的数据可视化和监控平台,它提供了丰富的图表、仪表盘和警报功能,用于实时监控和分析系统指标、日志和事件等数据。Grafana能够与多种数据源集成,包括Prometheus、InfluxDB、Elasticsearch等,因此它可以用来展示和分析由这些云原生应用监控工具收集的数据。

Prometheus是一个开源的系统监控和警报工具,它具备高度灵活的数据模型和查询语言,能够实时收集、存储和分析各种系统指标和时间序列数据。Prometheus提供了强大的监控和报警能力,可以用于监控云原生应用程序的性能、可用性和健康状态。

Grafana和Prometheus通常一起使用,作为云原生应用程序的监控和可视化解决方案。它们能够与容器编排工具(如Kubernetes)集成,实现自动发现和监控容器化应用程序的各个组件,提供实时的指标和可视化仪表盘,帮助开发人员和运维团队更好地理解和管理云原生应用程序的状态和性能。

因此,Grafana和Prometheus作为云原生应用程序开发和运维的重要工具,可以帮助实现云原生应用的监控、管理和调优,提高应用程序的可靠性和性能。

可能是你想要看的实操(安装)

docker-compose部署Grafana

cocker-compse.yaml:

version: '3'

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - 3000:3000    # 将Grafana的监听端口映射到主机的3000端口,以便可以通过http://localhost:3000访问Grafana
    volumes:
      - ./grafana/data:/var/lib/grafana    # 持久化存储Grafana的数据
    environment:
      - GF_SECURITY_ADMIN_USER=admin    # 设置管理员用户名
      - GF_SECURITY_ADMIN_PASSWORD=admin    # 设置管理员密码
    restart: always    # 容器故障时自动重启

docker-compose部署Prometheus

你可能会用到的prometheus.yml:

# Global配置项适用于整个Prometheus实例
global:
  scrape_interval: 15s       # 指定抓取指标的时间间隔
  evaluation_interval: 15s  # 指定评估规则的时间间隔

# 基本的抓取配置,用于收集指标数据
scrape_configs:
  - job_name: 'prometheus'   # 作业名称,用于标识此配置项
    static_configs:
      - targets: ['localhost:9090']  # 指定要抓取指标的目标

# 规则文件的配置,用于定义警报规则和记录规则
rule_files:
  - 'alert.rules.yml'
  - 'recording.rules.yml'

# 警报管理器的配置
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']   # 指定Alertmanager的目标

docker-compose.yaml:

version: '3'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - 9090:9090
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/data:/prometheus
      - ./prometheus/consoles:/etc/prometheus/consoles
      - ./prometheus/console_libraries:/etc/prometheus/console_libraries
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'    # Prometheus配置文件的路径
      - '--storage.tsdb.path=/prometheus'    # Prometheus数据存储路径
      - '--web.console.templates=/etc/prometheus/consoles'    # Prometheus控制台模板文件路径
      - '--web.console.libraries=/etc/prometheus/console_libraries'    # Prometheus控制台库文件路径
    restart: always    # 容器故障时自动重启
    environment:    # 环境变量设置(示例)
      - TZ=Asia/Shanghai    # 设置时区

把grafana和prometheus运行起来:

Grafana登录: http://127.0.0.1:3000/

Prometheus登录: http://127.0.0.1:9090/

可能是你想要看的实操(使用)

1.登录grafana管理页,在Home>Administration>Data Sources中添加数据源:

云原生-Grafana和Prometheus

2.选择Prometheus,输入刚安装的Prometheus地址,然后点击最下方的”Save & test“:

云原生-Grafana和Prometheus

3.可以在"Dashboard"(仪表盘)选项,然后选择 "Import"(导入)选项,也可以在Prometheus中Dashboards选项栏中快捷使用的提供的Dashboard,import:

云原生-Grafana和Prometheus

4.最后就可以在Dashboard中看到Prometheus的数据啦:

云原生-Grafana和Prometheus

或许可以添加到应用当中

以go语言的gin应用为例:

  1. 安装 Prometheus 客户端库:在 Gin 应用中使用 Prometheus,需要安装 Prometheus 客户端库。可以使用 Go 模块管理工具(如 Go Modules)来安装 Prometheus 客户端库。在终端中执行以下命令:

    go get github.com/prometheus/client_golang/prometheus
    
  1. 在 Gin 应用中使用 Prometheus:在的 Gin 应用程序中,导入 Prometheus 客户端库并创建指标对象,例如:

    import (
       "github.com/gin-gonic/gin"
       "github.com/prometheus/client_golang/prometheus"
    )
    
    func main() {
       // 创建一个新的默认的路由引擎
       router := gin.Default()
    
       // 创建一个新的 Counter 指标
       counter := prometheus.NewCounter(prometheus.CounterOpts{
           Name: "myapp_requests_total",
           Help: "Total number of requests",
       })
    
       // 将指标注册到默认的注册表中
       prometheus.MustRegister(counter)
    
       // 在路由处理函数中增加指标计数
       router.GET("/", func(c *gin.Context) {
           counter.Inc()
           c.JSON(200, gin.H{"message": "Hello, World!"})
       })
    
       // 启动应用程序
       router.Run(":8080")
    }
    

上述示例代码创建了一个名为 myapp_requests_total 的计数器指标,并在根路由处理函数中增加了指标计数。可以根据需要创建其他类型的指标,并在适当的位置进行增加或修改。

  1. 启动应用程序:运行的 Gin 应用程序并确保它正常启动。

  2. 配置 Prometheus:在 Prometheus 的配置文件 prometheus.yml 中,添加一个 job 配置,用于指定要监控的 Gin 应用程序的地址和端口。配置如下:

    - job_name: 'myapp'
     static_configs:
       - targets: ['192.168.1.107:8080']  # Gin 应用程序的地址和端口
    
  1. 启动 Prometheus:启动 Prometheus 服务器。

  2. 接下来就可以在grafana中看到Prometheus的监控数据啦:

云原生-Grafana和Prometheus

都看到这了,或许你很幸运开启了你的运维道路,亦或者你也因为目前的互联网市场开始了其他方向的探索,亦或者你还在坚持,亦或者你已经成功拥抱AI。本想简简单单写一篇技术文,却也不自觉受到市场影响。天下本无事,庸人自扰之。祝你好运。