数据可视化平台,快速搭建

本文介绍了如何在SpringBoot项目中集成Actuator和Prometheus,用于数据采集、监控JVM、MySQL、Redis等服务,同时展示了如何使用Grafana进行数据可视化和报警管理。通过Docker部署和全栈监控配置,构建了一个强大的IT监控与可视化平台。
摘要由CSDN通过智能技术生成

 环境介绍

  • 数据来源:SpringBoot + Actuator
  • 数据采集:Prometheus
  • 数据展示:Grafana

监控维度

  • JVM
  • MySQL
  • Redis
  • 服务器信息

演示环境

  • Ubuntu
  • Docker

Prometheus介绍

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继K8S之后第二个在CNCF托管的项目,在Kubernetes容器管理系统中,通常会搭配Prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

  • Prometheus 服务器

Prometheus Server 是 Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

  • NodeExporter 业务数据源

业务数据源通过 Pull/Push 两种方式推送数据到 Prometheus Server。

  • AlertManager 报警管理器

Prometheus 通过配置报警规则,如果符合报警规则,那么就将报警推送到 AlertManager,由其进行报警处理。

  • 可视化监控界面

Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行调用数据展示,也可以直接使用 Grafana 解决方案来展示。

简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理。 但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研发成本。

Grafana

Grafana 是一款用 GO 语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。

特点:

  • 可视化
    Grafana 拥有快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式,让我们复杂的数据展示的美观而优雅。
  • 报警和通知
    可视化地为最重要的指标定义警报规则。Grafana 将持续评估它们,并发送通知。
  • 动态仪表盘
    使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
  • 混合数据源
    在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
  • 注释
    注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
  • 过滤器
    Grafana 使用 Ad-hoc 过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

搭建篇-SpringBoot配置

怎么创建一个SpringBoot项目相比都知道我就不赘述了。

  • POM配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.beiming.talk</groupId>
    <artifactId>beiming-talk-backend</artifactId>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-prometheus -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
            <version>1.10.4</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • 配置信息配置
server:
  port: 8080
spring:
  application:
    name: beiming-talk
management:
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    tags:
      application: ${spring.application.name}
  • 注入实例
@Bean
public MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) {
        return (registry) -> registry.config().commonTags("application", applicationName);
 }
  • 检查是否OK
http://你的IP:你的端口/actuator/prometheus
  • 效果演示

Prometheus安装

重点:全Docker环境演示,通过Docker-Compose安装,后面不再提及!!!

  • 在/etc/prometheus/目录下创建prometheus.yml文件
#vim /etc/prometheus/prometheus.yml

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["172.17.0.1:3001"]
  #SpringBoot应用配置
  - job_name: 'application_example'
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['172.17.0.1:8080']
  • 配置信息:
version: "3.7"
services:
  prometheus:
    image: prom/prometheus:latest
    restart: always
    user: root
    ports:
      - "9090:9090"
    volumes:
      - "/etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml"
      - "./prometheus_data:/prometheus"
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus"
      - "--web.console.libraries=/etc/prometheus/console_libraries"
      - "--web.console.templates=/etc/prometheus/consoles"
  • 访问

访问地址:http://localhost:9090/

Grafana安装

默认用户名为admin

  • 安装
version: '3'

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SERVER_ROOT_URL=http://localhost:3000
      - GF_SECURITY_ADMIN_PASSWORD=自己定密码
      - GF_INSTALL_PLUGINS=grafana-piechart-panel,grafana-worldmap-panel,redis-datasource
volumes:
  grafana_data:
  • 访问

  • 数据源配置

MySQL监控

  mysqld-exporter:
    image: prom/mysqld-exporter
    ports:
      - "9104:9104"
    environment:
      - DATA_SOURCE_NAME=账号:密码@(你的IP:3306)/数据库名称

机器监控

  node-exporter:
     image: quay.io/prometheus/node-exporter
     container_name: node-exporter
     restart: always
     ports:
      - "9100:9100"

Redis监控,不用配置探针

直接面板可以监控

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个非常强大的Web框架,它可以轻松地构建Web应用程序。在这里,我们将介绍如何使用Django搭建一个可视化平台。 1. 安装Django 首先,您需要安装Django。您可以使用以下命令在终端中安装Django: ``` pip install django ``` 2. 创建Django项目 接下来,您需要创建一个Django项目。使用以下命令在终端中创建Django项目: ``` django-admin startproject myproject ``` 这将创建一个名为“myproject”的Django项目。 3. 创建Django应用程序 现在,您需要创建一个Django应用程序。使用以下命令在终端中创建Django应用程序: ``` cd myproject python manage.py startapp myapp ``` 这将在“myproject”目录中创建一个名为“myapp”的Django应用程序。 4. 创建模型 接下来,您需要创建一个模型。模型定义了应用程序中使用的数据类型。在“myapp/models.py”文件中创建以下模型: ``` from django.db import models class MyModel(models.Model): name = models.CharField(max_length=100) value = models.IntegerField() ``` 这将创建一个名为“MyModel”的模型,该模型具有两个字段:名为“name”的字符字段和名为“value”的整数字段。 5. 迁移数据库 现在,您需要迁移数据库以创建模型。使用以下命令在终端中迁移数据库: ``` python manage.py makemigrations myapp python manage.py migrate ``` 这将创建一个名为“myapp”的迁移文件并将其应用于数据库。 6. 创建视图 接下来,您需要创建一个视图。视图处理传入的HTTP请求并返回HTTP响应。在“myapp/views.py”文件中创建以下视图: ``` from django.shortcuts import render from .models import MyModel def index(request): mymodel = MyModel.objects.all() return render(request, 'index.html', {'mymodel': mymodel}) ``` 这将创建一个名为“index”的视图,该视图从数据库中检索所有“MyModel”对象并将其传递给名为“index.html”的模板。 7. 创建模板 现在,您需要创建一个模板。模板定义了应用程序的外观和感觉。在“myapp/templates/index.html”文件中创建以下模板: ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My App</title> </head> <body> <h1>My App</h1> <table> <tr> <th>Name</th> <th>Value</th> </tr> {% for item in mymodel %} <tr> <td>{{ item.name }}</td> <td>{{ item.value }}</td> </tr> {% endfor %} </table> </body> </html> ``` 这将创建一个简单的HTML表格,其中包含所有“MyModel”对象的名称和值。 8. 配置URL 现在,您需要配置URL。URL将HTTP请求路由到正确的视图。在“myproject/urls.py”文件中创建以下URL: ``` from django.urls import path from myapp.views import index urlpatterns = [ path('', index, name='index'), ] ``` 这将创建一个名为“index”的URL,该URL将请求路由到名为“index”的视图。 9. 运行应用程序 现在,您可以运行应用程序。使用以下命令在终端中运行应用程序: ``` python manage.py runserver ``` 这将启动Django开发服务器并运行应用程序。在Web浏览器中访问“http://127.0.0.1:8000”以查看可视化平台
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值