澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

Redis监察和控制产品Opserver之Redis配置,服务器数

采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态),opserverasp.net

前言

之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. 

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

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

今天我们主要来介绍一下,如何使用Opserver监控我们的服务器状态.

Opserver的功能其实很强大,他可以用于连接任何支持Bosun, Orion, or direct WMI监控数据。

大概效果如下:

 

 

正文

用Opserver 怎么像zabbix一样监控服务器呢,查看github官方说明,Opserver可用于连接任何支持Bosun, Orion, or direct WMI监控数据。

简介

Influxdb(分布式时序数据库,开源)
Grafana(开源的,功能齐全的度量仪表盘和图形编辑器)
App Metrics(开源的支持.NET Core的监控插件)

 

Introduction

ASP.NET Boilerplate provides an abstraction for caching. It internally uses this cache abstraction. While default implementation uses MemoryCache.aspx?f=255&MSPPError=-2147217396), it can be implemented and changable for any other caching provider.Abp.RedisCache package implements cache in Redis for instance (see "Redis Cache Integration" section below).

ASP.NET提供了一个抽象的模板缓存。它在内部使用这个缓存抽象。而使用memorycache默认实现,它可以实现和改变其他任何缓存provider.abp.rediscache包实现比如Redis缓存(见下面的Redis的缓存集成”部分)。

1.通过Windows自带的WMI监控服务器

首先,我们找到相关的配置文件,修改配置文件的名称 DashboardSettings.json.example 为 DashboardSettings.json

然后修改DashboardSettings.json设置连接地址 providers,这里我们以WMI为例,如下:

{

  "providers": {

Redis监察和控制产品Opserver之Redis配置,服务器数据监察和控制。    "wmi": {

      "nodes": [ "USER-20170316IW" ], // List of nodes to monitor

      "staticDataTimeoutSeconds": 300, // (Optional) How long to cache static data (node name, hardware, etc.) - defaults to 5 minutes

      "dynamicDataTimeoutSeconds": 5, // (Optional) How long to cache dynamic data (utilizations, etc.) - defaults to 30 seconds

      "historyHours": 2, // (Optional) How long to retain data (in memory) - defaults to 24 hours

      "username": "Administrator"

    }

}

解释一下参数说明:

  • nodes 可以有多台,可以填 服务器名称 或是 IP地址

  • StaticDataTimeoutSeconds 缓存静态数据(节点名称、硬件等)要多长时间-默认为5分钟

  • DynamicDataTimeoutSeconds 缓存动态数据(CPU,加载时间等)要多长时间-默认为30秒

  • HistoryHours 保留记录的时长,默认为 2 小时

  • Username 远程服务器的账户名

  • Password 远程服务器的密码(PS,我这里因为连接的是本机 所以就不需要了.)

设置完连接之后,我们可以设置我们的警戒值,如下:

設定警戒值

key 說明
cpuWarningPercent cpu 用量警戒(黄色)
cpuCriticalPercent cpu 用量危险(红色)
memoryWarningPercent 内存用量警戒(黄色)
memoryCriticalPercent 内存用量危险(红色)
diskWarningPercent 磁盘空间 用量警戒(黄色)
diskCriticalPercent 磁盘空间 用量危险(红色)

JSON配置直接添加在providers节点下即可.

如下:

{

"providers":{

 "cpuWarningPercent": 50,

  "cpuCriticalPercent": 60,

  "memoryWarningPercent": 90,

  "memoryCriticalPercent": 95, 

  "diskWarningPercent": 85,

  "diskCriticalPercent": 95

}

}

多台服务器的情况下,服务器的配置不一定相同,所以需要根据服务器配置 单独设置报警值,我们可以添加categories节点,并配置如下:

"categories": [

    {

     "name": "第一台", // Name for this group of servers

     "pattern": "-sql",

     "cpuWarningPercent": 20, 

     "cpuCriticalPercent": 60,

      "memoryWarningPercent": 98, 

     "memoryCriticalPercent": 99.2

 },

     "name": "第二台", 

     "pattern": "-sql", 

     "cpuWarningPercent": 20, 

     "cpuCriticalPercent": 60,

Redis监察和控制产品Opserver之Redis配置,服务器数据监察和控制。      "memoryWarningPercent": 98,

     "memoryCriticalPercent": 99.2

 }

]

这样,我们就完成了我们使用WMI采集信息,并展示在OpServer上的全部工作.

当然,官方推荐的是使用bosun scollector OpServer的形式来采集和显示

所以,我们下面就来讲讲(不过我本人并没有实践..资源实在有限)

Opserver is a monitoring system by the team at Stack Exchange, home of Stack Overflow. It is a tool for monitoring: 
•Servers/Switches & anything supported by Bosun, Orion, or direct WMI monitoring
•SQL Clusters & Single Instances 
•Redis 
•Elasticsearch 
•Exception Logs (from StackExchange.Exceptional) 
•HAproxy
•PagerDuty
•CloudFlare DNS
•... and more as we go

influxdb安装

前置条件:安装docker,我安装的是 docker for windows

搜索 indluxdb

docker search influxdb 

安装 tutum/influxdb

docker pull tutum/influxdb

运行

docker run -d -p 8083:8083 -p8086:8086 --expose 8090 --expose 8099 --name influxsrv tutum/influxdb

其中8083 是web管理工具的端口,8086是influxdb http api 的端口

现在可以输入 http://localhost:8083 ,并创建数据库 test

图片 1

influxdb管理界面

 

ICacheManager

Main interface for caching is ICacheManager. We can inject it and use it to get a cache. Example:

public class TestAppService : ApplicationService
{
    private readonly ICacheManager _cacheManager;

    public TestAppService(ICacheManager cacheManager)
    {
        _cacheManager = cacheManager;
    }

    public Item GetItem(int id)
    {
        //Try to get from cache
        return _cacheManager
                .GetCache("MyCache")
                .Get(id.ToString(), () => GetFromDatabase(id)) as Item;
    }

    public Item GetFromDatabase(int id)
    {
        //... retrieve item from database
    }
}

In this sample, we're injecting ICacheManager and getting a cache named MyCache. Cache names are case sensitive, than means "MyCache" and "MYCACHE" are different caches.

在本示例中,我们将icachemanager获得缓存命名mycache。缓存的名称是区分大小写的,不是指“mycache”和“mycache”不同的高速缓存。

2.通过bosun scollector监控服务器

1、bosun 快速安装(当然,也有不使用Docker的..不过说实话..太复杂了..也许就是因为太复杂了,才放到容器里简化安装了吧)

  •      安装docker

      ..具体我就不说了,直接移步安装步骤官网:

  •      在docker中安装bosun

     使用命令“docker run -d -p 4242:4242 -p 8070:8070 stackexchange/bosun”,安装bosun,文件大概200多M,等待完成即可。

  •      检查是否安装成功

     访问网站

 

2、服务器agent数据采集器(scollector)

   可以到    下载scollector.

    以windows 为例,下载“scollector-windows-amd64.exe"后,用管理员身份运行”cmd.exe"。cd 到文件目录,在命令窗口输入“scollector-windows-amd64 -h  docker-server-ip:8070"

    显示如下信息,表示与bosun服务建立连接。命令如下:

C:>scollector-windows-amd64 -h 192.168.1.101:8070
2016/11/18 15:59:19 info: main.go:213: OpenTSDB host: http://192.168.1.101:8070

然后可在bosun items 界面看到此服务器信息。

写在最后

至此我们就完成了监控服务器的所有操作.喜欢的请关注一下,~觉得不错的可以点个推荐,当然也欢迎大神批评指正.~

相关文章: 

  • .NET开源MSSQL、Redis监控产品Opserver之Redis配置

  • Opserver开源的服务器监控系统(ASP.NET)

  • 采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)

``

原文地址:


.NET社区新闻,深度好文,欢迎访问公众号文章汇总

 Bosun 是stackExchange开发的开源监控程序,目前最新版本0.5,官方网站www.bosun.org,bosun依赖OpenTSDB和HBase;安装方式有两种,一种是docker方式安装,另一种是下载二进制文件自行安装(需要同时安装bosun,OpenTSDB,HBase)。

安装grafana

搜索 grafana

docker search grafana

安装grafana

docker pull grafana/grafana

运行 grafana

docker run -d -p 3000:3000 --name grafanasrv grafana/grafana

现在可以输入http://localhost:3000访问管理界面 默认账户密码是admin

安装完成后需要下载 仪表模板 https://grafana.com/dashboards/2125然后导入

图片 2

grafana监控界面

配置数据库

图片 3

配置数据库

如图填写好数据库配置,默认的数据库用户名密码是root

图片 4

配置数据库

至此,grafana安装配置完成

 

WARNING: GetCache Method

Do not use GetCache method in your constructor. This may dispose the Cache if your class is not singleton.

不要在构造函数使用getcache方法。如果类不是单例,则可以处理缓存。

本文重点记录怎么利用bosun在Opserver上对服务器进行监控。

.net core中使用App Metrics

创建一个web Api项目,然后添加如下引用

App.Metrics
App.Metrics.Extensions.Middleware
App.Metrics.Extensions.Mvc
App.Metrics.Extensions.Reporting.InfluxDB
App.Metrics.Extensions.Middleware
App.Metrics.Formatters.Json

然后修改startup类

 public void ConfigureServices(IServiceCollection services)
        {
            var database = "test";
            var uri = new Uri("http://127.0.0.1:8086");

            services.AddMetrics(options =>
            {
                options.GlobalTags.Add("app", "sample app");
                options.GlobalTags.Add("env", "stage");
            })
               .AddHealthChecks()

               .AddReporting(
                  factory =>
                  {
                      factory.AddInfluxDb(
                new InfluxDBReporterSettings
                {
                    InfluxDbSettings = new InfluxDBSettings(database, uri),
                    ReportInterval = TimeSpan.FromSeconds(5)
                });
                  })
               .AddMetricsMiddleware(options => options.IgnoredHttpStatusCodes = new[] { 404 });

            // Add framework services.
            services.AddMvc();
        }

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,IApplicationLifetime lifetime)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            app.UseMetrics();
            app.UseMetricsReporting(lifetime);

            app.UseMvc();
        }

运行api 然后调用几次api。,最后查看监控界面

图片 5

监控界面

参考文档:ASP.NET Core之跨平台的实时性能监控

安全与基础配置地址:

ICache

ICacheManager.GetCache method returns an ICache. A cache is singleton (per cache name). It is created first time it's requested, then returns always the same cache object. So, we can share same cache with same name in different classes (clients).

In the sample code, we see simple usage of ICache.Get method. It has two arguments:

  • key: A string unique key of an item in the cache.
  • factory: An action which is called if there is no item with the given key. Factory method should create and return the actual item. This is not called if given key has present in the cache.

ICache interface also has methods like GetOrDefault, Set, Remove and Clear. There are also async versions of all methods.

icachemanager.getcache方法返回一个高速缓冲存储器。缓存是单例(每个缓存名称)。它是第一次被请求创建的,然后返回相同的缓存对象。因此,我们可以在不同的类(客户端)共享相同的缓存相同的名称。

在示例代码中,我们看到的内容简单的用法。获得方法。它有两个论点:

关键字:缓存中项的字符串唯一键。
工厂:如果没有带给定键的项,则调用该操作。工厂方法应该创建并返回实际项目。如果给定的密钥存在于缓存中,则不调用它。
高速缓冲存储器接口也有方法,像GetOrDefault一样,设置,删除和清除。也有各种方法的异步版本。

 

edis监控数据实例的加载可以查看Opserver.Core项目data/Redis文件夹下的RedisModule.cs,我加了点注释

ITypedCache

ICache interface works string as key and object as value. ITypedCache is a wrapper to ICache to provide type safe, generic cache. We can use generic GetCache extension method to get an ITypedCache:

ICache接口string是key,object是value,ITypedCache 包装了ICache提供类型安全,通用的缓存。我们可以使用通用的getcache扩展方法来获得一个itypedcache

ITypedCache<int, Item> myCache = _cacheManager.GetCache<int, Item>("MyCache");

Also, we can use AsTyped extension method to convert an existing ICache instance to ITypedCache.

同时,我们可以用astyped扩展方法将现有的指令缓存实例itypedcache。

1、bosun 快速安装

/// <summary>
        /// 加载Redis连接
        /// </summary>
        /// <returns></returns>
        private static List<RedisConnectionInfo> LoadRedisConnections()
        {
            var result = new List<RedisConnectionInfo>();
            //默认实例
            var defaultServerInstances = Current.Settings.Redis.Defaults.Instances;
            //Servers节点的子集
            var allServerInstances = Current.Settings.Redis.AllServers.Instances;

            foreach (var s in Current.Settings.Redis.Servers)
            {
                var count = result.Count;
                // Add instances that belong to any servers 为Servers实例添加子集
                allServerInstances?.ForEach(gi => result.Add(new RedisConnectionInfo(s.Name, gi)));

                // Add instances defined on this server 添加定义在Servers里的实例
                if (s.Instances.Count > 0)
                    s.Instances.ForEach(i => result.Add(new RedisConnectionInfo(s.Name, i)));

                // If we have no instances added at this point, defaults it is! 如果没有任何实例则添加默认的
                if (defaultServerInstances != null && count == result.Count)
                    defaultServerInstances.ForEach(gi => result.Add(new RedisConnectionInfo(s.Name, gi)));
            }
            return result;
        }

Configuration

Default cache expire time is 60 minutes. It's sliding. So, if you don't use an item in the cache for 60 minutes, it's automatically removed from the cache. You can configure it for all caches or for a specific cache.

默认缓存过期时间为60分钟。它在滑动。因此,如果不在缓存中使用一个项目60分钟,它会自动从缓存中移除。您可以为所有缓存或特定的缓存配置它。

//Configuration for all caches
Configuration.Caching.ConfigureAll(cache =>
{
    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2);
});

//Configuration for a specific cache
Configuration.Caching.Configure("MyCache", cache =>
{
    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);
});

This code should be placed PreInitialize method of your module. With such a code, MyCache will have 8 hours expire time while all other caches will have 2 hours.

Your configuration action is called once cache is first created (on first request). Configuration is not restricted to DefaultSlidingExpireTime only, since cache object is an ICache, you can use it's properties and methods freely configure and initialize it.

这个代码应该放在分发你的模块的方法。这样的代码,mycache将有8小时的期限而其他缓存将有2小时。

一旦第一次创建缓存(第一次请求),您的配置操作就被调用了。配置不限于defaultslidingexpiretime而已,因为缓存的对象是一个内容,你可以使用它的属性和方法可自由配置和初始化。

  •      安装docker

allservers和default下的实例配置,会影响servers下的配置,allservers和default的实例被添加到servers的各个节点,可以理解allservers和default的配置为通用配置,另外如果allservers,servers下有实例 ,default下实例不起作用。如果要自定义实例加载,可以修改这段代码。实际配置中我们只要配置servers就可以了。

Entity Caching

While ASP.NET Boilerplate's cache system is general purpose, there is an EntityCache base class that can help you if you want to cache entities. We can use this base class if we get entities by their Ids and we want to cache them by Id to not query from database frequently. Assume that we have a Person entity like that:

而ASP.NET的样板文件的缓存系统是通用的,有一个entitycache基类,可如果你想缓存实体的帮助你。我们可以使用这个基类,如果我们通过它们的ID获取实体,我们希望通过ID缓存它们,而不是频繁地从数据库中查询。假设我们有这样的person实体:

public class Person : Entity
{
    public string Name { get; set; }

    public int Age { get; set; }
}

And assume that we frequently want to get Name of people while we know their Id. First, we should create a class to store cache items:

假设我们经常想知道人们的名字,但首先我们应该创建一个类来存储缓存项:

[AutoMapFrom(typeof(Person))]
public class PersonCacheItem
{
    public string Name { get; set; }
}

We should not directly store entities in the cache since caching may need to serialize cached objects and entities may not be serialized (especially if they have navigation properties). That's why we defined a simple (DTOlike) class to store data in the cache. We added AutoMapFrom attribute since we want to use AutoMapper to convert Person entities to PersonCacheItem objects automatically. If we don't use AutoMapper, we should override MapToCacheItem method of EntityCache class to manually convert/map it.

While it's not required, we may want to define an interface for our cache class:

我们不应该直接从缓存中缓存实体店可能需要序列化缓存对象和实体不被序列化(特别是如果他们有导航性能)。这就是为什么我们定义了一个简单的(dtolike)类缓存中存储数据。我们增加了automapfrom属性因为我们想使用AutoMapper将个人实体personcacheitem对象自动。如果我们不使用AutoMapper,我们应该重写entitycache类maptocacheitem方法手动转换/图。

虽然不是必需的,但我们可能希望为缓存类定义一个接口:

public interface IPersonCache : IEntityCache<PersonCacheItem>
{

}

Finally, we can create the cache class to cache Person entities:

public class PersonCache : EntityCache<Person, PersonCacheItem>, IPersonCache, ITransientDependency
{
    public PersonCache(ICacheManager cacheManager, IRepository<Person> repository)
        : base(cacheManager, repository)
    {

    }
}

That's all. Our person cache is ready to use. Cache class can be transient (as in this example) or singleton. This does not mean the cached data is transient. It's always cached globally and accessed thread-safe in your application.

这就是全部.我们的缓存已经可以使用了。缓存类可以是临时的(如本例中)或单例。这并不意味着缓存的数据是暂时的。它总是在全局缓存,并在应用程序中访问线程安全。

Now, whenever we need Name of a person, we can get it from cache by the person's Id. An example class that uses the Person cache:

现在,当我们需要一个人的名字时,我们可以通过使用人缓存的Id. An的示例类来从缓存中获取它:

public class MyPersonService : ITransientDependency
{
    private readonly IPersonCache _personCache;

    public MyPersonService(IPersonCache personCache)
    {
        _personCache = personCache;
    }

    public string GetPersonNameById(int id)
    {
        return _personCache[id].Name; //alternative: _personCache.Get(id).Name;
    }
}

We simply injected IPersonCache, got the cache item and got the Name property.

      docker目前主要支持在liunx系统,本文安装步骤根据官网

{
  "Servers": [
    {
      "name": "127.0.0.1",
      "instances": [
        {
          "name": "localhost",
          "port": "6379",
          "password": "zoulu19900206"
        }
      ]
    },
    {
      "name": "192.168.11.220",
      "instances": [
        {
          "name": "work",
          "port": "6379",
          "password": "Lz 18518095396 zL"
        }
      ]
    }
  ]
}

How EntityCache Works

  • It gets entity from repository (from database) in first call. Then gets from cache in subsequent calls.
  • It automatically invalidates cached entity if this entity is updated or deleted. Thus, it will be retrieved from database in the next call.
  • It uses IObjectMapper to map entity to cache item. IObjectMapper is implemented by AutoMapper module. So, you need to AutoMapper module if you are using it. You can override MapToCacheItem method to manually map entity to cache item.
  • It uses cache class's FullName as cache name. You can change it by passing a cache name to the base constructor.
  • It's thread-safe.

If you need more complex caching requirements, you can extend EntityCache or create your own solution.

它在第一次调用中从存储库(从数据库)获取实体。然后在后续调用中从缓存中获取。
它会自动消除缓存的实体如果这个实体是更新或删除。因此,它将在下一次调用中从数据库中检索。
它采用iobjectmapper地图实体缓存项。iobjectmapper由AutoMapper模块实现。所以,你需要AutoMapper模块如果你使用它。你可以重写maptocacheitem方法手动地图实体缓存项。
它使用的缓存类的全名为缓存名称。您可以通过将缓存名称传递给基本构造函数来更改它。
它是线程安全的。
如果你需要更复杂的缓存要求,您可以扩展entitycache或创建您自己的解决方案。

  •      在docker中安装bosun

好了,下面上几张效果图

Redis Cache Integration

Default cache manager uses in-memory caches. So, it can be a problem if you have more than one concurrent web server running the same application. In that case, you may want to a distributed/central cache server. You can use Redis as your cache server easily.

First, you need to install Abp.RedisCache nuget package to your application (you can install it to your Web project, for example). Then you need to add a DependsOn attribute for AbpRedisCacheModule and callUseRedis extension method in PreInitialize method of your module, as shown below:

默认缓存管理器用于内存缓存。因此,如果有一个以上的并发Web服务器运行相同的应用程序,这可能是个问题。在这种情况下,您可能需要一个分布式/中央缓存服务器。你可以使用Redis作为你的缓存服务器很容易。

首先,你需要安装abp.rediscache NuGet包添加到您的应用程序(你可以把它安装到您的Web项目,例如)。然后你需要添加一个对AbpRedisCacheModule和calluseredis扩展方法在分发你的模块的方法取决于属性,如下图所示:

//...other namespaces
using Abp.Runtime.Caching.Redis;

namespace MyProject.AbpZeroTemplate.Web
{
    [DependsOn(
        //...other module dependencies
        typeof(AbpRedisCacheModule))]
    public class MyProjectWebModule : AbpModule
    {
        public override void PreInitialize()
        {
            //...other configurations

            Configuration.Caching.UseRedis();
        }

        //...other code
    }
}

Abp.RedisCache package uses "localhost" as connection string as default. You can add connection string to your config file to override it. Example:

使用“localhost”abp.rediscache包你有默认的连接字符串。你可以添加到你的配置文件到连接字符串重写它。例子:

<add name="Abp.Redis.Cache" connectionString="localhost"/>

Also, you can add setting to appSettings to set database id of Redis. Example:

<add key="Abp.Redis.Cache.DatabaseId" value="2"/>

Different database ids are useful to create different key spaces (isolated caches) in same server.

UseRedis method has also an overload that takes an action to directly set option values (overrides values in the config file).

See Redis documentation for more information on Redis and it's configuration.

Note: Redis server should be installed and running to use Redis cache in ABP.

不同的数据库IDS有助于在同一服务器中创建不同的密钥空间(隔离缓存)。

useredis方法还具有过载,需要一个行动直接设置选项值(重写值在配置文件中)。

看到这样的信息,它的配置文件的使用。

注:Redis服务器必须安装并运行在ABP使用Redis缓存。

     使用命令“docker run -d -p 4242:4242 -p 8070:8070 stackexchange/bosun”,安装bosun,文件大概200多M,等待完成即可。

图片 6

  •      检查是否安装成功

图片 7

     访问网站

 

 

面板展示的属性都是可以通过redis info命令获取到,opserver做了更清晰的展示。

 

Ops(/sec)  每秒处理量

 2、服务器agent数据采集器(scollector)

memory(used)即used_memory_rss(used_memory)

   可到 .

used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps等命令的输出一致。

    以windows 为例,下载“scollector-windows-amd64.exe"后,用管理员身份运行”cmd.exe"。cd 到文件目录,在命令窗口输入“scollector-windows-amd64 -h  docker-server-ip:8070"

used_memory_peak : Redis 的内存消耗峰值(以字节为单位)

    显示如下信息,表示与bosun服务建立连接。稍后可在bosun items 界面看到此服务器信息。

used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位

C:>scollector-windows-amd64 -h 192.168.1.101:8070
2016/11/18 15:59:19 info: main.go:213: OpenTSDB host: http://192.168.1.101:8070

 

 

Summary是总体概览部分。

 

Memory是内存使用情况,重要。

3、Opserver配置

persistence 是RDB和AOF的状态。

找到“DashboardSettings.json.example"文件,启用bosun,并指向

 

"providers": {
    "bosun": {
      "host": "http://192.168.1.101:8070"
    },

keyspace key存储的情况,analyze进去可以查看详细分布。

 

 

stats  客户端命令的key命中率和处理量

 

clients 查看有哪个ip(或机器名)过来的连接数多,很方便的定位到那台应用端机器长时间没有释放连接,重要。

 

slow command log 服务端接受的命令日志。

 

Opserver系列目录

 

本文由澳门新浦京娱乐场网站发布于服务器,转载请注明出处:Redis监察和控制产品Opserver之Redis配置,服务器数