使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

一、背景

在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能。Grafana 是一款功能强大的仪表盘面板,支持多种数据源,可以自定义图表进行监控。而 Prometheus 就是 Grafana 支持的数据源之一,Prometheus 负责采集需要监控的数据,然后通过 Grafana 展示出来。

Prometheus 拥有多种 Exporter 进行监控数据的导出,这里我们使用的是 Mysql Exporter 来进行数据库状态的监控。

很久没写博客了,最近实在太忙,工作之余在研究 Abp vNext。

二、动手实践

首先参考博文《Linux 下的 Docker 安装与使用》安装好 Docker,之后再参考博文 《CentOS 7.x 安装 Docker-Compose》安装好 Docker-Compose 之后,就可以开始我们的工作了。

CentOS 7.x 安装 Docker-Compose

一、安装步骤

  1. 添加企业版附加包。

    1
    
    yum -y install epel-release
    
  2. 安装 PIP。

    1
    
    yum -y install python-pip
    
  3. 更新 PIP。

    1
    
    pip install --upgrade pip
    
  4. 安装 Docker Compose

    1
    
    pip install docker-compose
    

DNF 服务端基于 CENTOS 6.x 进行安装步骤

一、安装基本环境

1. 调整 SWAP 分区大小 (可选)

如果你的服务器配置内存过低,低于 4 G 的话都建议添加 SWAP 交换区。按照顺序依次执行以下代码:

1
2
3
4
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=8000
mkswap /var/swap.1
swapon /var/swap.1
sed -i '$a /var/swap.1 swap swap default 0 0' /etc/fstab

这里 count=8000 是你需要指定的 Swap 文件大小,你可以执行成你自己想要的交换文件大小,当然越大越好。

关于 Abp 替换了 DryIoc 框架之后的问题

在之前有些过一篇文章 《使用 DryIoc 替换 Abp 的 DI 框架》 ,在该文章里面我尝试通过以替换 IocManager 内部的 IContainer 来实现使用我们自己的 DI 框架。替换了之后我们基本上是可以正常使用了,不过仍然还存在有以下两个比较显著的问题。

  1. 拦截器功能无法正常使用,需要重复递归查找真实类型,消耗性能。
  2. 针对于通过 IServiceCollection.AddScoped() 方法添加的 Scoped 类型的解析存在问题。

下面我们就来针对于上述问题进行问题的分析与解决。

1. 问题 1

1.1 现象与原因

首先,来看一下问题 1 ,针对于问题 1 我在 Github 上面向作者请教了一下,造成嵌套注册的原因很简单。因为之所以我们解析的时候,原来的注册类型会解析出来代理类。

关于上述原因可以参考 DryIoc 的 Github 问题 #50 。

这是因为 DryIoc 是通过替换了原有注册类型的实现,而如果按照之前我们那篇文章的方法,每次注册事件被触发的时候就会针对注册类型嵌套一层代理类。这样如果某个类型有多个拦截器,这样就会造成一个类型嵌套的问题,在外层的拦截器被拦截到的时候无法获取到当前代理的真实类型。

Abp 源码分析:十七、ASP.NET Core 集成

0. 简介

整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了。虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ASP.NET Core 才能发挥它真正的作用。

在 Abp.AspNetCore 库里面,Abp 通过 WindsorRegistrationHelper.CreateServiceProvider() 接管了 ASP.NET Core 自带的 Ioc 容器。除此之外,还针对 Controller 的生成规则也进行了替换,以便实现 Dynamic API 功能。

总的来说,整个 Abp 框架与 ASP.NET Core 集成的功能都放在这个库里面的,所以说这个库还是相当重要的。这个项目又依赖于 Abp.Web.Common 库,这个库是存放了很多公用方法或者工具类的,后面也会有讲述。

Built with Hugo
主题 Stack 由 Jimmy 设计