GVKun编程网logo

cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台(docker监控软件cadvisor的主要功能)

6

在这篇文章中,我们将带领您了解cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台的全貌,包括docker监控软件cadvisor的主要功能的相关情况。同时,我们还将

在这篇文章中,我们将带领您了解cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台的全貌,包括docker监控软件cadvisor的主要功能的相关情况。同时,我们还将为您介绍有关.Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控、.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控、7、Docker监控方案(cAdvisor+InfluxDB+Grafana)、CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统的知识,以帮助您更好地理解这个主题。

本文目录一览:

cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台(docker监控软件cadvisor的主要功能)

cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台(docker监控软件cadvisor的主要功能)

通过cadvisor+influxdb+grafana三者有机结合,打造跨主机容器监控。

优点

1、跨主机监控,可扩展
2、容器自发现
3、历史数据长期保存
4、自定义配置程度高
5、采集间隔很短,达到秒级
6、多种方式告警

缺点

1、不能自动隐藏已停止的容器
2、grafana会展现所有的数据,导致展示长时间的数据时,各个数据点重叠。

展示长时间

组件

数据采集–cAdvisor

cAdvisor为Docker容器用户提供了了解运行时容器资源使用和性能特征的工具。

cAdvisor是单机版容器监控系统,通过收集宿主机的cgroup统计信息,经过加工处理后通过图展示在页面上。

这些信息包括宿主机、容器的CPU、内存、网络流量、磁盘空间等资源隔离和运行数据。
cadvisor资源隔离

工作流程大致:

1)、收集、聚集、处理宿主机的cgroup统计数据
2)、写入后端基于事件序列的数据库(本文使用InfluxDB)
3)、展示时读取基于事件序列的数据库

优势:

部署、维护简单:通过容器形式部署,“开箱即用”,无需配置即可使用
监控容器和宿主机
通过图展示,比较美观
支持多种基于事件序列的数据库,写入和读取快

不足之处:

只能看到2-3分钟的监控数据
消耗的内存较高,通常几百M
页面加载较慢

cadvisor监控图

数据存储–InfluxDB

InfluxDB是一个开源分布式时序、事件和指标数据库。

influxdb使用Go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

其主要特色功能

基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
可度量性:可以实时对大量数据进行计算
基于事件:支持任意的事件数据

InfluxDB的主要特点

无结构(无模式):可以是任意数量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函数,方便统计
原生的HTTP支持,内置HTTP API
强大的类SQL语法
自带管理界面,方便使用

在使用过程中发现influxdb缺点:

在select查询时,字段必须是time或者value,不能为其他字段
    例如:select container_name from "cpu_usage_user" limit 100无结果

监控配置和展示–Grafana

Grafana是一款开源的监控绘图工具。

对收集来的数据进行展示和分析。

特性:

用于可视化大型测量数据的开源程序,提供了强大和优雅的方式去创建、共享、浏览数据。
dashboard中展示不同metric数据源中的数据。
常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器、家庭自动化、过程控制等等。
有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、Cloudwatch、Prometheus、InfluxDB、Elasticsearch。
自定义配置灵活,支持模板、展示数据内容配置等等。
支持告警

部署

运行环境

宿主机:CentOS7 7.3.1611

docker版本为1.12.6

通过docker容器方式部署。部署情况

                        cadvisor    influxdb    grafana
docker1 192.168.20.128  部署      部署       部署
docker2 192.168.20.129  部署      /          /    
docker3 192.168.20.130  部署      /          /

influxdb

创建容器

docker create -p 8083:8083 -p 8086:8086 -v /opt/influxdb:/var/lib/influxdb --name=influxdb --hostname=influxdb tutum/influxdb 
docker start influxdb
8086用于Influxdb数据读写,8083用于数据库管理界面

InfluxDB容器创建成功后,可以通过http://192.168.20.128:8083/打开管理界面。

创建用户

点击页面右上角的设置图标,数据账号和密码,点击save
influxdb设置密码

创建数据库

创建cadvisor数据库,用于收集存储Docker的性能数据,在输入框输入CREATE DATABASE “cadvisor”然后按回车,执行命令。

在输入框输入SHOW DATABASES,可以看到刚才创建的数据库
influxdb建立数据库

cadvisor

创建cAdvisor容器

docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --hostname=cadvisor --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_host=192.168.20.128:8086 -storage_driver_db=cadvisor -storage_driver_user=root -storage_driver_password=1qaz2wsx

-storage_driver=influxdb 指定存储驱动,使cadvisor将数据存储到数据库中,更多存储插件

-storage_driver_host=influxdb:8086 InfluxDB数据库的地址

-storage_driver_db=cadvisor 数据库名称

如果要指定用户名可以用-storage_driver_user参数,默认是root

如果要指定密码可以用-storage_driver_password参数,默认是root

cAdvisor运行以后,可以通过http://宿主机IP:8080/查看到Docker运行的机器和容器情况。

验证cAdvisor是否已经向InfluxDB存入数据

打开http://192.168.20.128:8083/的InfluxDB管理界面

点击右上角Database切换到cadvisor数据库

然后在输入框输入SHOW MEASUREMENTS可以看到已经创建了很多个表

这里写图片描述

grafana

部署容器

docker create -p 3000:3000 --hostname grafana --name grafana grafana/grafana

默认admin的用户名和密码是admin/admin

配置

访问http://192.168.20.128:3000

添加数据库

grafana数据库配置
这里写图片描述

配置模板

这里写图片描述
这里写图片描述

.Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控

.Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控

 

前言

.net core 2.* 实施性能监控

这个工具其实给运维 大大们用起来是更爽的。但是Grafana现在还没有找到中文版。

本文需要了解的相关技术与内容:

InfluxDb(分布式时序数据库,开源)(注:分布式部分已商业化最新的分布式版本已不在开源,单例的继续开源)

Grafana(开源的,功能齐全的度量仪表盘和图形编辑器)

App Metrics(主角,开源的支持.NET Core的监控插件,采用管道注入的方式,对代码的入侵性极小)

效果图

 

安装influxdb

influxdb在1.*版本之后就不再有网页版本了。

所以大家选择版本的时候一定要注意这个事情免得找不到influxdb 的 admin控制台

下载地址

https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3_windows_amd64.zip

我这里选择的是1.6.3版本

解压文件夹之后进行如下配置,打开config中的配置文件

修改如下几项目

[meta]
  # Where the metadata/raft database is stored
  dir = "D:/influxdb/meta"
[data]
  # The directory where the TSM storage engine stores TSM files.
  dir = "D:/influxdb/data"
  # The directory where the TSM storage engine stores WAL files.
  wal-dir = "D:/influxdb/wal"

如果使用的是1.*之前的版本就可以打开admin控制台

配置是这样的

[admin]
  # Determines whether the admin service is enabled.
   enabled = true

  # The default bind address used by the admin service.
   bind-address = ":8083"

然后运行influxdb

influxd -config influxdb.conf

运行起来之后就是这个样子

 好多 人都使用了1.*之后的版本,没有admin控制台给大家 推荐一个工具

InfluxDBStudio-0.1.0  用这个货创建一个数据库就可以了

配置Grafana

下载地址:

https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.3.1.windows-amd64.zip 

解压之后 在文件夹之后直接运行这个程序

grafana-server.exe

Grafana默认会监听3000的端口,所以我们进入

http://127.0.0.1:3000,
默认账号密码:admin admin

就是这样的效果啦

 

安装默认的模板

地址如下:https://grafana.com/dashboards/2125

 

这里选择刚才我们下载的json文件就可以,或者直接输入2125都可以

添加数据库配置文件

配置好了之后就会出现这个样子了

 

在.net core配置

先把这些DLL引用了吧。项目右键编辑帖进去  重新生成一下就可以了。

<PackageReference Include="App.Metrics" Version="2.1.0" />
    <PackageReference Include="App.Metrics.AspNetCore.Endpoints" Version="2.0.0" />
    <PackageReference Include="App.Metrics.AspNetCore.Reporting" Version="2.0.0" />
    <PackageReference Include="App.Metrics.AspNetCore.Tracking" Version="2.0.0" />
    <PackageReference Include="App.Metrics.Extensions.Reporting.InfluxDB" Version="1.2.0" />
    <PackageReference Include="App.Metrics.Formatters.Json" Version="2.1.0" />
    <PackageReference Include="App.Metrics.Reporting.InfluxDB" Version="2.0.0" />

修改appsettings.json配置文件

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "InfluxDB": {
    "IsOpen": true,
    "DataBaseName": "LogDb",
    "ConnectionString": "http://127.0.0.1:8086",
    "username": "admin",
    "password": "xxxxxxxxxx",
    "app": "LogDbDemo",
    "env": "stage"
  }
}

修改startup进行管道接管

 ConfigureServices添加 如下

#region Metrics监控配置
            string IsOpen = Configuration.GetSection("InfluxDB")["IsOpen"].ToLower();
            if (IsOpen == "true")
            {
                string database = Configuration.GetSection("InfluxDB")["DataBaseName"];
                string InfluxDBConStr = Configuration.GetSection("InfluxDB")["ConnectionString"];
                string app = Configuration.GetSection("InfluxDB")["app"];
                string env = Configuration.GetSection("InfluxDB")["env"];
                string username = Configuration.GetSection("InfluxDB")["username"];
                string password = Configuration.GetSection("InfluxDB")["password"];

                var uri = new Uri(InfluxDBConStr);

                var metrics = AppMetrics.CreateDefaultBuilder()
                .Configuration.Configure(
                options =>
                {
                    options.AddAppTag(app);
                    options.AddEnvTag(env);
                })
                .Report.ToInfluxDb(
                options =>
                {
                    options.InfluxDb.BaseUri = uri;
                    options.InfluxDb.Database = database;
                    options.InfluxDb.UserName = username;
                    options.InfluxDb.Password = password;
                    options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
                    options.HttpPolicy.FailuresBeforeBackoff = 5;
                    options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
                    options.FlushInterval = TimeSpan.FromSeconds(5);
                })
                .Build();

                services.AddMetrics(metrics);
                services.AddMetricsReportScheduler();
                services.AddMetricsTrackingMiddleware();
                services.AddMetricsEndpoints();

            }
            #endregion

 

 Configure添加这些东西

#region 注入Metrics
            string IsOpen = Configuration.GetSection("InfluxDB")["IsOpen"].ToLower();
            if (IsOpen == "true")
            {
                app.UseMetricsAllMiddleware();
                // Or to cherry-pick the tracking of interest
                app.UseMetricsActiveRequestMiddleware();
                app.UseMetricsErrorTrackingMiddleware();
                app.UseMetricsPostAndPutSizeTrackingMiddleware();
                app.UseMetricsRequestTrackingMiddleware();
                app.UseMetricsOAuth2TrackingMiddleware();
                app.UseMetricsApdexTrackingMiddleware();

                app.UseMetricsAllEndpoints();
                // Or to cherry-pick endpoint of interest
                app.UseMetricsEndpoint();
                app.UseMetricsTextEndpoint();
                app.UseEnvInfoEndpoint();
            }
            #endregion

运行项目跑一圈之后 返回Grafana就出现了这样的图例

 

后续

刚刚创建了一个.net core的群欢迎大家进入:

点击链接加入群聊【.Net Core研究团】:https://jq.qq.com/?_wv=1027&k=5IEolkJ

如果我的文章对您有帮助,希望您可以点个赞。最近打算申请mvp。希望大家帮忙。

特别感谢 

狮子 :https://www.cnblogs.com/GuZhenYin/ 

 

.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控

.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控

最近这段时间一直在忙,没时间写博客,负责了一个项目,从前端到后端一直忙,同时还有其他第几个项目的系统架构要处理。

去年就开始关注net core了,只是平时写写demo,没用在项目中,正好这次机会就用了net core,具体是什么时候开始的不太记得了,总之刚开始是用core 1.0开发,然后在开发的时候突然想到,平时我们的项目中都没有做过项目的实时监控,为什么这次不试试看呢,而且还能知道每天什么时段的流量走向,系统吞吐量等。记得之前去北京总公司的时候,看到java开发部那边有一个大屏幕,实时的显示项目的吞吐量、请求量等信息,感觉非常酷,我们net应该可以可以实现吧。

抱着这总心态就去找了一些相关资料,也就在项目用了起来。

项目部署在windows环境下,Influxdb的介绍这里不再赘述。

1、首先安装InfluxDB时序数据库,地址如下:https://portal.influxdata.com/downloads#influxdb ,这里我就下载Windows Binaries (64-bit),具体的写一下配置文件和安装过程。

解压后打开influxdb.conf,因为influxdb的默认配置全是针对linux配置的,所以我们需要修改一下配置文件。

修改下面3个liunx的路径,改为winodws路径如下:

[meta]
  # Where the metadata/raft database is stored
  dir = "influxdb/meta"
[data]
  # The directory where the TSM storage engine stores TSM files.
  dir = "influxdb/data"
# The directory where the TSM storage engine stores WAL files.
  wal-dir = "influxdb/wal"

我将influxdb的文件都放在了influxdb目录下,可以用相对位置,也可以用绝对位置,这个可以根据个人需要修改。

这里提一下,Influxdb v1.2.4之后好像网页图形化管理界面就去掉了,1.2.4之前的是有网页图形化管理界面的,influxdb.conf文件之前还有

[admin]
  # Determines whether the admin service is enabled.
   enabled = true

  # The default bind address used by the admin service.
   bind-address = ":8083"


不过后面的版本,conf文件里就没有这个了,所以大家要注意一下。后面版本没办法用网页图形化管理,如果要连接Influxdb的话可以在目录下以cmd运行influx.exe,如果不想所有人都可以访问你的InfluxDB,那么你可以在conf文件里配置认证信息


# Determines whether HTTP endpoint is enabled.
enabled = true

# The bind address used by the HTTP service.
bind-address = ":8086"

# Determines whether user authentication is enabled over HTTP/HTTPS.
auth-enabled = true


最后cmd运行,进入到你的解压目录,执行命令:

influxd -config influxdb.conf

这里说一下,使用influx.exe登录时,输入以下命令:influx -host 127.0.0.1 -port 8086 -username "admin" -password "123456",这样就连上InfluxDB了。然后创建数据库:CREATE DATABASE "AppMetricsDemo"。

如果你觉得这样比较麻烦,可以安装两个influxDB,一个是V1.2.4版的,一个是最新版的,这是需要修改配置文件的端口,将两个influxDB的端口修改成不一样的就好,然后用1.2.4版本的连接最新版的即可,如图,点击右上角的齿轮图标即可出现连接表单,

(安装好influxDB后,记得在influxDB中创建Demo需要的数据库“AppMetricsDemo”)

2、安装Grafana,下载地址:https://grafana.com/get,我们解压后进入bin目录,如图:

直接运行grafana-server.exe即可。

Grafana默认会监听3000的端口,所以我们进入http://localhost:3000,

会让你登陆,直接输入本地的管理员帐户即可,帐户:admin  密码:admin,进入后如图:

安装完成之后,我们下载相关仪表模版的Json文件。

地址如下:https://grafana.com/dashboards/2125

然后我们导入我们的仪表:如图操作即可

 

添加我们上面的数据源,如图:

选择Add DataSource,然后操作如下:

这样,我们就完成了Grafana的安装配置和添加数据源。

由于实际项目中,我们不可能在服务器上运行个控制台去开启这些服务,所以我们需要将influxDB和Grafana发布成服务的形式运行在服务器上,这里我们可以使用nssm工具将InfluxDB和Grafana封装成服务运行。

下载地址如下:http://www.nssm.cc/download

解压后进入到对应系统版本文件夹中,里面有个32位和64位的文件,根据自己的实际情况选择,如图:

我们选择win64,进入文件夹后运行cmd,输入nssm install InfluxDB 运行后出现如下界面:

重点说一下参数这一栏,Argument里输入:-config influxdb.conf,类似上面在cmd中输入Influxd -config influxdb.conf

安装好后运行起来就好,Grafana的安装类似上面的操作,只是Argument这一栏不需要输入任何东西。

3、.netCore 中使用AppMetrics,新建一个名为Demo 的api,然后编辑右键编辑 Demo.csproj文件,在ItemGroup节点下新增以下Package

<PackageReference Include="App.Metrics" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Endpoints" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Reporting" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.AspNetCore.Tracking" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.Extensions.Reporting.InfluxDB" Version="1.2.0" />
<PackageReference Include="App.Metrics.Formatters.Json" Version="2.0.0-alpha" />
<PackageReference Include="App.Metrics.Reporting.InfluxDB" Version="2.0.0-alpha" />

 保存后,项目就引用了AppMetrics相关类库

然后修改appsettings.json文件。添加如下代码

{
   "Logging" : {
     "IncludeScopes" : false ,
     "Debug" : {
       "LogLevel" : {
         "Default" : "Warning"
       }
     },
     "Console" : {
       "LogLevel" : {
         "Default" : "Warning"
       }
     }
   },
   "InfluxDB" : {
     "IsOpen" : true ,
     "DataBaseName" : "AppMetricsDemo" ,
     "ConnectionString" : "http://10.10.134.109:8086" ,
     "username" : "admin" ,
     "password" : "123456" ,
     "app" : "RepairApp" ,
     "env" : "stage"
   }
}

ConfigureServices方法,如下:


using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Threading.Tasks;
using  Microsoft.AspNetCore.Builder;
using  Microsoft.AspNetCore.Hosting;
using  Microsoft.Extensions.Configuration;
using  Microsoft.Extensions.DependencyInjection;
using  Microsoft.Extensions.Logging;
using  Microsoft.Extensions.Options;
using  App.Metrics;
 
namespace  Demo
{
     public  class  Startup
     {
         public  Startup(IConfiguration configuration)
         {
             Configuration = configuration;
         }
 
         public  IConfiguration Configuration {  get ; }
 
         // This method gets called by the runtime. Use this method to add services to the container.
         public  void  ConfigureServices(IServiceCollection services)
         {
             #region Metrics监控配置
             string  IsOpen = Configuration.GetSection( "InfluxDB" )[ "IsOpen" ].ToLower();
             if  (IsOpen ==  "true" )
             {
                 string  database = Configuration.GetSection( "InfluxDB" )[ "DataBaseName" ];
                 string  InfluxDBConStr = Configuration.GetSection( "InfluxDB" )[ "ConnectionString" ];
                 string  app = Configuration.GetSection( "InfluxDB" )[ "app" ];
                 string  env = Configuration.GetSection( "InfluxDB" )[ "env" ];
                 string  username = Configuration.GetSection( "InfluxDB" )[ "username" ];
                 string  password = Configuration.GetSection( "InfluxDB" )[ "password" ];
 
                 var  uri =  new  Uri(InfluxDBConStr);
 
                 var  metrics = AppMetrics.CreateDefaultBuilder()
                 .Configuration.Configure(
                 options =>
                 {
                     options.AddAppTag(app);
                     options.AddEnvTag(env);
                 })
                 .Report.ToInfluxDb(
                 options =>
                 {
                     options.InfluxDb.BaseUri = uri;
                     options.InfluxDb.Database = database;
                     options.InfluxDb.UserName = username;
                     options.InfluxDb.Password = password;
                     options.HttpPolicy.BackoffPeriod = TimeSpan.FromSeconds(30);
                     options.HttpPolicy.FailuresBeforeBackoff = 5;
                     options.HttpPolicy.Timeout = TimeSpan.FromSeconds(10);
                     options.FlushInterval = TimeSpan.FromSeconds(5);
                 })
                 .Build();
 
                 services.AddMetrics(metrics);
                 services.AddMetricsReportScheduler();
                 services.AddMetricsTrackingMiddleware();
                 services.AddMetricsEndpoints();
 
             }
             #endregion
 
             services.AddMvc();
         }
 
         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
         public  void  Configure(IApplicationBuilder app, IHostingEnvironment env)
         {
             if  (env.IsDevelopment())
             {
                 app.UseDeveloperExceptionPage();
             }
 
             #region 注入Metrics
             string  IsOpen = Configuration.GetSection( "InfluxDB" )[ "IsOpen" ].ToLower();
             if  (IsOpen ==  "true" )
             {
                 app.UseMetricsAllMiddleware();
                 // Or to cherry-pick the tracking of interest
                 app.UseMetricsActiveRequestMiddleware();
                 app.UseMetricsErrorTrackingMiddleware();
                 app.UseMetricsPostAndPutSizeTrackingMiddleware();
                 app.UseMetricsRequestTrackingMiddleware();
                 app.UseMetricsOAuth2TrackingMiddleware();
                 app.UseMetricsApdexTrackingMiddleware();
 
                 app.UseMetricsAllEndpoints();
                 // Or to cherry-pick endpoint of interest
                 app.UseMetricsEndpoint();
                 app.UseMetricsTextEndpoint();
                 app.UseEnvInfoEndpoint();
             }
             #endregion
 
             app.UseMvc();
         }
     }
}


代码这一块基本上完成了。

接下来运行项目,访问以下,然后看看Grafana中的仪表盘看看

附上demo地址:https://github.com/landonzeng/AppMetricsDemo

相关文章: 

  • 听云支持.NET Core的应用性能监控

  • 下一个计划 : .NET/.NET Core应用性能管理

  • ASP.NET Core之跨平台的实时性能监控

  • ASP.NET Core之跨平台的实时性能监控(2.健康检查)

  • 应用程序的8个关键性能指标以及测量方法

  • 使用Metrics监控应用程序的性能

原文:http://www.cnblogs.com/landonzeng/p/7904402.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com


本文分享自微信公众号 - dotNET跨平台(opendotnet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

7、Docker监控方案(cAdvisor+InfluxDB+Grafana)

7、Docker监控方案(cAdvisor+InfluxDB+Grafana)

一、组件介绍

我们采用现在比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控。

1、cAdvisor(数据采集)

开源软件cAdvisor(Container Advisor)是用于监控容器运行状态的利器之一,该项目主页为https://github.com/google/cadvisor,它被用于多个与docker相关的开源项目中。实际上在Kubernetes系统中,cAdvisor已经被默认集成到了kubelet组件内。cAdvisor提供了web界面可供浏览器访问,在接下来的环境中我们会部署CAdvisor来收集数据信息。

2、Influxdb(数据存储)

Influxdb是用Go语言编写的一个开源的分布式时序、事件和指标数据库,不需要外部依赖,该项目的主页为https://www.influxdata.com。

它有三大特性:

  • 时序性(Time Series):与时间相关的函数的灵活使用(诸如最大、最小、求和等)。
  • 度量(Metrics):对实时大量数据进行计算。
  • 事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作。

同时,它还有以下几大特点:

  • schemaless(无结构),可以是任意数量的列;
  • min, max, sum, count, mean, median 一系列函数,方便统计;
  • Native HTTP API, 内置http支持,使用http读写;
  • Powerful Query Language 类似sql;
  • Built-in Explorer 自带管理工具。

3、Grafana(数据展示)

 Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;多个数据源。其项目官方地址为https://grafana.com。

 

 二、组件安装

1、安装流程

  • 创建自定义网络monitor(自定义网络名称),确保各容器都处于monitor网络;
  • 创建Influxdb容器,创建数据用户grafana:grafana、数据库:vadvisor;
  • 创建cAdvisor容器;
  • 创建Grafana容器,配置grafana;

  

2、安装部署

a、创建网络

[root@localhost ~]# docker network create monitor
46d9e7c32080ac35e1d3034ecf4edf2af804de9352eca37373f7437e37b1368d

  

 

b、创建influxdb容器

[root@localhost ~]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb
a0fdc618d380ece7dabd7f1f802935502d0c6ae3f606216afed5dafc43ea8da5

 

 c、访问influxdb

通过容器的8083端口访问web页面。

d、创建数据库cadvisor和用户

cadvisor数据库用于存储数据,用户用于grafana上进行连接,后续会用到此用户。

 

e、创建cadvisor容器

$docker run -d \
--name=cadvisor \
--net monitor \
-p 8080:8080 \
--mount type=bind,src=/,dst=/rootfs,ro \
--mount type=bind,src=/var/run,dst=/var/run \
--mount type=bind,src=/sys,dst=/sys,ro \
--mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro \
google/cadvisor \
-storage_driver=influxdb \
-storage_driver_db=cadvisor \
-storage_driver_host=influxdb:8086

  

查看容器是否创建成功:

 

访问cadvisor

通过8081端口访问cadvisor:

 

 f、安装grafana容器

docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana

  

 

g、访问grafana

 

3、容器监控

a、添加数据源

 

b、制作dashboard

新建dashboard,选择类型为Graph:

 

c、添加监控指标

 

 d、制作模板

按照c步骤中添加各个指标,然后做成模板,后续你想监控哪个容器就直接替换container_name即可,是不是棒棒哒?

到这里cAdvisor+InfluxDB+Grafana容器监控系统就部署完成了,是不是非常简单?

但是,要做好容器的监控,知道这些还远远不行,我们不希望每次都手动去添加吧?如果有成千上万个容器,到那个时候该怎么监控呢?肯定是一种自动添加方式了,而不是原始的手工操作哦。

 

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

利用docker compose组合应用并利用scale可以快速对容器进行扩充,而docker compose启动的服务容器都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的运行情况,如:cpu使用率,内存使用率,网络状态,磁盘空间等一系列随时间变化的时序数据信息,都需要进行了解,因此监控是必须的。

容器监控方案选择

对于容器的监控方案可谓多种多样,除了docker本身自带的 docker stats 命令,还有Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等都可以对容器进行监控。

通过 docker stats 命令可以很方便的看到当前宿主机上所有容器的cpu,内存,以及网络流量等数据。但 docker stats 命令的缺点是只是统计当前宿主机的所有容器,获取的数据是实时的,没有地方存储,也没有报警功能。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

而Scout,Data Dog,Sysdig Cloud虽然都提供了较完善的服务,但是它们都是托管的服务且都是收费的,Sensu Monitoring Framework集成度较高,也免费,但是部署过于复杂,综合考虑选择CAdvisor做监控工具。

CAdvisor出自Google,优点是开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。缺点是集成度不高,默认只在本地保存2分钟数据。不过,可以加上InfluxDB存储数据,对接Grafana展示图表,比较便利搭建容器监控系统,数据收集和图表展示效果良好,对系统性能也几乎没什么影响。

CAdvisor + InfluxDB + Grafana搭建容器监控系统

CAdvisor

CAdvisor是一个容器资源监控工具,包括容器的内存,cpu,网络IO,磁盘IO等,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机,不过,CAdvisor提供了很多数据集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

CAdvisor功能主要有两点,展示Host,容器两个层次的监控数据和展示历史变化

InfluxDB

InfluxDB是用Go语言编写的一个开源分布式时序,事件和指标数据库,无需外部依赖。

由于CAdvisor默认只在本地保存最近2分钟的数据,为了持久化数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor数据,而且CAdvisor本身提供了InfluxDB集成的方法,在启动容器时指定配置即可。

InfluxDB主要功能:

  • 基于时间序列,支持与时间有关的相关函数

  • 可度量性,可以实时对大量数据进行计算

  • 基于事件,支持任意的事件数据

InfluxDB主要特点:

  • 无结构

  • 可以是任意数量的列

  • 可拓展

  • 支持min,max等一系列的函数,方便统计

  • 原生的HTTP支持,内置HTTP API

  • 强大的类sql语法

Granfana

Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置(如InfluxDB,MySQL,Elasticserach,OpenTSDB,Graphite等)和丰富的插件及模板功能,支持图表权限控制和报警。

Grafana主要特点

  • 灵活丰富的图形化选项

  • 可以混合多种风格

  • 支持白天和夜间模式

  • 多数据源

CAdvisor负责收集容器随时间变化的数据

InfluxDB负责存储时序数据

Grafana负责分析和展示时序数据

安装部署

部署InfluxDB服务

启动InfluxDB的服务容器:

docker run -d --name influxdb -p 8086:8086 \
-v /data/influxdb:/var/lib/influxdb \
--hostname influexdb \
influxdb

在容器中创建test数据库和root用户

docker exec -it influxdb influx
> CREATE DATABASE "test"
> CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

部署CAdvisor

启动CAdvisor的服务容器:

docker run \
 --volume=/:/rootfs:ro \
 --volume=/var/run:/var/run:ro \
 --volume=/sys:/sys:ro \
 --volume=/var/lib/docker/:/var/lib/docker:ro \
 --volume=/dev/disk/:/dev/disk:ro \
 --publish=8080:8080 \
 --detach=true \
 --name=cadvisor \
 google/cadvisor:latest \
 -storage_driver=influxdb \
 -storage_driver_host=influxdb:8086 \
 -storage_driver_db=test \
 -storage_driver_user=root \
 -storage_driver_password=root

服务容器起来后可通过浏览器访问 http:///ip:8080

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

部署Grafana

启动Grafana服务容器:

docker run -d -p 3000:3000 \
-v /data/grafana:/var/lib/grafana \
--link=influxdb:influxdb \
--name grafana grafana/grafana

直接运行该命令后有可能会发现容器并没有启起来,通过 docker logs 命令会发现”mkdir: can’t create directory ‘/var/lib/grafana/plugins’: Permission denied“的错误,其实就是没有 数据卷对应的主机上 /data/grafana 的权限,可以在运行启动命令前先创建 /data/grafana 目录并给定权限777,或者通过”docker run —entrypoint “id” grafana/grafana“ 查看uid,gid,groups (默认为472),然后通过”chown -R 472:472 /data/grafana“修改权限。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

Grafana正常启动后就可以 http://ip:3000 访问,出现以下的登录页面,初次访问需要修改密码,默认用户名密码为:admin/admin

Docker Compose集成部署

准备docker-compose.yml文件

version: '3.1'
volumes:
 grafana_data: {}
services:
 influxdb:
   image: influxdb
   restart: always
   environment:
     - PRE_CREATE_DB=cadvisor
   ports:
     - "8086:8086"
   expose:
     - "8090"
     - "8099"
   volumes:
     - ./data/influxdb:/data
 cadvisor:
   image: google/cadvisor
   links:
     - influxdb:influxdb-host
   command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb-host:8086
   restart: always
   ports:
     - "8080:8080"
   volumes:
     - /:/rootfs:ro
     - /var/run:/var/run:rw
     - /sys:/sys:ro
     - /var/lib/docker:/var/lib/docker:ro
 grafana:
   user: "104"
   image: grafana/grafana
   restart: always
   links:
     - influxdb:influxdb-host
   ports:
     - "3000:3000"
   volumes:
     - grafana_data:/var/lib/data
   environment:
     - HTTP_USER=admin
     - HTTP_PASS=admin
     - INFLUXDB_HOST=influxdb-host
     - INFLUXDB_PORT=8086
     - INFLUXDB_NAME=cadvisor
     - INFLUXDB_USER=root
     - INFLUXDB_PASS=root

在docker-compose.yml文件目录运行以下命令启动服务:

docker-compose up -d

-d指定在后台启动,初次启动可以不加可以在控制台查看启动日志,当然后台启动也可以通过“docker-compose logs”进行查看启动日志。

服务正常启动后就可以 http://ip:3000 访问Granafa,在Home Dashboard页面点击添加data source

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

配置InfluxDB连接信息,当然在配置连接信息前需要进入InfluxDB容器创建相应的cadvisor数据库和用户root/root

在容器中创建cadvisor数据库和root用户

docker exec -it influxdb-contianer-id influx
> CREATE DATABASE "cadvisor"
> CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

配置连接InfluxDB连接:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

数据源配好之后可以回到Home Dashboard添加添加dashboard图表展示监控信息,Grafana提供了丰富的图片模板对监控数据进行展示。

添加dashboard:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

可选模板:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

编辑图表:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

配置监控cadvisor容器的内存使用情况的图表展示,配置好之后点击保存就可以了。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注小编行业资讯频道,感谢您对小编的支持。

今天关于cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台docker监控软件cadvisor的主要功能的分享就到这里,希望大家有所收获,若想了解更多关于.Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控、.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控、7、Docker监控方案(cAdvisor+InfluxDB+Grafana)、CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统等相关知识,可以在本站进行查询。

本文标签:

上一篇为 docker 创建 ubuntu 带 SSH 的基础镜像(docker制作ubuntu镜像)

下一篇servlet解析演进(7)-session(2)("/servlet/session")