使用 Jenkins、Prometheus、Grafana 和 Docker 的 DevOps 监控和自动化工具

2025-06-07

使用 Jenkins、Prometheus、Grafana 和 Docker 的 DevOps 监控和自动化工具

在本指南中,我们将介绍设置 DevOps 监控和自动化工具的过程,并了解如何将不同的工具一起使用以实现此目的:用于持续集成和持续部署(CI/CD)的 Jenkins、用于指标收集的 Prometheus、用于可视化的 Grafana 和用于容器化的 Docker。

...

安装 Docker

如果您尚未安装 Docker,请按照Docker 网站上适合您的操作系统的安装说明进行操作。

设置 Jenkins

在 Docker 容器中运行 Jenkins:

 ```
 docker run -u 0 --privileged --name jenkins -it -d -p 8080:8080 -p 
 50000:50000 
 \-v/var/run/docker.sock:/var/run/docker.sock 
 \-v $(which docker):/usr/bin/docker 
 \-v /home/jenkins_home:/var/jenkins_home 
 \jenkins/jenkins:latest
```
Enter fullscreen mode Exit fullscreen mode

访问和设置 Jenkins:

  • 打开浏览器并转到http://localhost:8080/

  • 您将被要求提供密码,并且有一个关于
    在哪里找到密码的指南,但是,如果您找不到文件,
    您可以运行以下命令:docker logs <docker container id>其中
    “docker container id”是运行 Jenkins 的 docker 容器的 id
    ,密码将显示在日志中。

  • 在本教程中,您可以选择安装建议的插件。
    我们稍后会安装其他所需的插件。

  • 从仪表板添加一个新项目,我将使用管道。

安装插件:

  • 转到“管理 Jenkins”>“管理插件”。

  • 在“可用”选项卡中,搜索“Docker 插件”、“Docker Pipeline
    插件”、“Prometheus metrics 插件”并安装。
    如果出现提示,请重启 Jenkins。

设置 Prometheus 和 Grafana

  • 创建 Docker 网络:
    docker network create monitoring

  • 运行 Prometheus:
    创建prometheus.yml配置文件:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'jenkins'
    static_configs:
      - targets: ['jenkins:8080']
      metrics_path: '/prometheus'

  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

Enter fullscreen mode Exit fullscreen mode
  • 使用以下配置运行 Prometheus:
docker run -d --name=prometheus 
\--network=monitoring 
\-p 9090:9090 
\-v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \prom/prometheus

Enter fullscreen mode Exit fullscreen mode
  • 运行节点导出器:
docker run -d --name=node-exporter 
\--network=monitoring 
\--restart=unless-stopped 
\prom/node-exporter

Enter fullscreen mode Exit fullscreen mode
  • 运行 Grafana:
docker run -d --name=grafana 
\--network=monitoring 
\-p 3000:3000 
\grafana/grafana

Enter fullscreen mode Exit fullscreen mode

配置 Grafana

  • 访问 Grafana
    打开浏览器并转到http:localhost:3000。使用默认用户名和密码登录(admin)。

  • 添加 Prometheus 作为数据源:
    前往左侧边栏的“数据源”,“添加数据源”,然后选择“Prometheus”。
    输入http://prometheus:9090Prometheus 服务器 URL。
    点击“保存并测试”。

  • 创建仪表板:
    从左侧边栏选择“仪表板”即可创建新仪表板。您可以使用 ID 或 URL 导入仪表板。例如,ID:11159。
    您可以编辑其中一个面板或“添加可视化”,然后添加查询以查看您想要查看的数据。
    在本例中,我们将查看 Jenkins 处理一项作业所需的时间。添加查询:
    default_jenkins_builds_last_build_duration_milliseconds

使用 Jenkins 自动化应用程序部署

  • 设置 Jenkins 管道:从您在 Jenkins 中设置的应用程序中,转到“配置”并向下滚动到“管道脚本”,下面的脚本将指导您,您可以自定义以适合您正在部署的应用程序:
pipeline {
    agent any

    environment {
        DB_HOST = 'your-db-host'
        DB_USER = 'your-db-user'
        DB_PASS = 'your-db-password'
        DB_NAME = 'your-db-name'
    }

    stages {
        stage('Checkout') {
            steps {
                script {
                    checkout([$class: 'GitSCM', branches: [[name: '*/main']],
                      doGenerateSubmoduleConfigurations: false,
                      extensions: [[$class: 'CleanCheckout']],
                      submoduleCfg: [],
                      userRemoteConfigs: [[url: 'https://github.com/yourusername/your-nodejs-typescript-api-repo.git',
                      credentialsId: 'git-credentials-id']]
                    ])
                }
            }
        }

        stage('Install Dependencies') {
            steps {
                sh 'npm install'
            }
        }

        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }

        stage('Test') {
            steps {
                sh 'npm test'
            }
        }

        stage('Build Docker Image') {
            steps {
                script {
                    sh 'docker build -t your-dockerhub-username/your-nodejs-typescript-api:latest .'
                }
            }
        }

        stage('Push Docker Image') {
            steps {
                script {
                    withCredentials([usernamePassword(credentialsId: 'dockerhub-credentials', usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
                        sh 'echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin'
                    }
                    sh 'docker push your-dockerhub-username/your-nodejs-typescript-api:latest'
                }
            }
        }

        stage('Deploy') {
            steps {
                script {
                    sh '''
                    docker run -d -p 3000:3000 \
                        -e NODE_ENV=$NODE_ENV \
                        -e DB_HOST=$DB_HOST \
                        -e DB_USER=$DB_USER \
                        -e DB_PASS=$DB_PASS \
                        -e DB_NAME=$DB_NAME \
                        your-dockerhub-username/your-nodejs-typescript-api:latest
                    '''
                }
            }
        }

        stage('Monitor') {
            steps {
                script {
                    // Additional monitoring setup can be added here
                }
            }
        }
    }

    post {
        success {
            echo 'Build succeeded!'
        }
        failure {
            echo 'Build failed!'
        }
    }
}


Enter fullscreen mode Exit fullscreen mode

证书

如果您要从 Github 拉取代码,则需要添加 git hub 和 Docker 的凭证。
前往“管理 Jenkins”>“凭证”,选择“全局”,然后添加 Github 和 Docker 的凭证。请记下 id,因为它将在流水线脚本中用作引用。

构建应用程序

构建您的应用程序并在 Grafana 仪表板上查看指标😃。

图片描述

文章来源:https://dev.to/nigel_bomett/devops-monitoring-and-automation-tool-using-jenkins-prometheus-grafana-and-docker-m8n
PREV
轻松集成 AI:CopilotKit 使用入门指南
NEXT
O(n*log n) 是什么?学习大 O 对数线性时间复杂度