使用 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
主题 StackJimmy 设计