使用 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
```
访问和设置 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']
- 使用以下配置运行 Prometheus:
docker run -d --name=prometheus 
\--network=monitoring 
\-p 9090:9090 
\-v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \prom/prometheus
- 运行节点导出器:
docker run -d --name=node-exporter 
\--network=monitoring 
\--restart=unless-stopped 
\prom/node-exporter
- 运行 Grafana:
docker run -d --name=grafana 
\--network=monitoring 
\-p 3000:3000 
\grafana/grafana
配置 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!'
        }
    }
}
证书
如果您要从 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 后端开发教程 - Java、Spring Boot 实战 - msg200.com
            后端开发教程 - Java、Spring Boot 实战 - msg200.com
          