使用 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:9090
Prometheus 服务器 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