基于Prometheus的.NET 4.x应用服务监控

【.NET监控总结/Edison Zhou

0Why 监控?

Edison所在团队95%以上的应用都是基于.NET 4.5开发的,只能跑在Windows Server服务器上的IIS中,公司运维也没有意愿对Windows Server进行有效的管理和提供监控支持,整得我们无法及时查看有效的性能状况(老实说,之前啥都没有)。

因此,我们需要自行搭建一套适合.NET 4.5应用的监控环境,Prometheus是首选。

1准备工作

下载Prometheus:https://prometheus.io/download/,最新版本:2.33.3

18dee8285bad139ad5036970cb0bbae0.png

下载Grafana:https://grafana.com/grafana/download,最新版本:8.3.6

e870829898e845a95e21d0f61e20e546.png

下载Windows Exporter:https://github.com/prometheus-community/windows_exporter/releases,最新版本:0.18.1,建议选择msi安装文件。

978abb2e604cc28063de15d111d9d755.png

Note:针对Windows Server服务器,请选择对应的Windows版本(amd64后缀)下载安装。

2Prometheus服务搭建

第一步,安装Prometheus Windows版本,假设这里安装在192.168.80.100服务器上。

第二步,打开prometheus.yml配置文件,将需要监控的服务器添加到配置文件中,假设我们需要对192.168.80.1 ~ 10 共计10台机器进行监控。这里我加了一些label,便于后续我进行筛选。

# my global config
global:scrape_interval: 60s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s)......# 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-Service"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["192.168.80.100:9090"]- job_name: 'Application-Server-Host'static_configs:- targets: ['192.168.80.1:9182','192.168.80.2:9182','192.168.80.3:9182','192.168.80.4:9182']labels:type: Windows-Serverstatus: InUsegroup: BIZ-PURCHASER- targets: ['192.168.80.5:9182','192.168.80.6:9182','192.168.80.7:9182','192.168.80.8:9182']labels:type: Windows-Serverstatus: InUsegroup: BIZ-SUPPLIER- targets: ['192.168.220.9:9182','192.168.220.10:9182']labels:type: Windows-Serverstatus: InUsegroup: BIZ-JOB

第三步,双击prometheus.exe启动(不推)。

第四步,将prometheus.exe注册为windows服务,开机自启动(推荐),可选方式:借助NSSM将exe配置为Windows服务。

第五步,在本地浏览器访问 http://localhost:9090 进行验证,能够正常访问就说明安装并启动成功。

3Windows Exporter安装配置

由于Windows Exporter默认并没有设置收集IIS和TCP连接数据,因此我们需要在安装目录下执行以下下面的命令:

msiexec /i windows_exporter-0.18.1-amd64.msi ENABLED_COLLECTORS=cpu,cpu_info,cs,logical_disk,net,os,service,system,textfile,iis,process,memory,tcp

Windows Exporter的默认端口是9182,一般不建议修改,当然你如果想修改也可以,修改一下上面的命令增加监听端口的参数,假设改为监听8000端口:

msiexec /i windows_exporter-0.18.1-amd64.msi ENABLED_COLLECTORS=cpu,cpu_info,cs,logical_disk,net,os,service,system,textfile,iis,process,memory,tcp LISTEN_PORT=8000

执行完上面的命令之后,Windows Exporter会开始自动安装,安装完成后会注册为一个Windows服务,我们可以在Windows服务列表中找到它:

03dde401402c3992641bd0474d946279.png

更多内容设置请参考:

https://github.com/prometheus-community/windows_exporter

当所有需要监控的服务器上都安装了Exporter之后,就可以通过Prometheus查看状态了:

082400d783454ffbb5ec0c49b7899dd2.png

8cf2ad2049520e94121351e11d30a901.png

踩坑记

在安装过程中,有一台服务器启动后报错

  • collected metric "windows_iis_worker_request_errors_total" { label:

    label:label:counter:<0>} was collected before with the same name and label values0>

  • collected metric "windows_iis_worker_request_errors_total" { label:

    label:label:counter:<0>} was collected before with the same name and label values0>

  • .......

发现只要加上针对iis的监控就会报如上错误,去掉就不会报错。

这个bug已经体现在了:

https://github.com/prometheus-community/windows_exporter/issues/903

但是,我使用的最新版本还是没有解决这个问题。

因此,我看了一下issue中的comments,针对这台服务器将版本退回到了0.16.0版本解决了这个问题。

4Grafana服务搭建

第一步,将安装包拷贝到服务器并解压,这里假设部署到192.168.80.100服务器上。

第二步,同Prometheus一样,将grafana-server.exe注册为windows服务,开机自启动(推荐),可选方式:借助NSSM将exe配置为Windows服务。

第三步,启动grafana-server.exe,可以通过访问 http://localhost:3000 进行验证,默认账号:admin/admin。

第四步,配置data source,增加Prometheus数据源。

a975342d417a95fbc1dfd67740b76801.png

40eb81056c51b85379192abcc73f4045.png

第五步,导入dashboard模板,这里我选择了两个模板,一个是展示Windows Server主机性能指标(10467),另一个则展示IIS应用站点的性能指标(13610)。

28a5ab76cb849c2d0e020d185adbc719.png

79478c22753037b58584f7870c1c02d3.png

点击Import即可完成dashboard导入。

更多dashboard请参考:

https://grafana.com/grafana/dashboards

5监控面板体验

Windows Server主机监控

该面板主要针对服务器主机的各项性能指标进行监控展示,主要包括:CPU使用率、内存使用率、磁盘IO、网络读写情况等。

819e504ed2f632ef44b332a2f15930b3.png

IIS .NET应用监控面板

该面板主要针对服务器主机上部署的IIS应用站点的各项性能指标进行监控展示,主要包括:TCP连接数、总体HTTP请求率、请求用户数等。

11afef835355c82a9f0defa1ab28b294.png

25b01125b51560d9005be7f57abb5ffd.png

End总结

本文介绍了如何基于Prometheus+Grafana+Windows Exporter监控Windows Server服务器及IIS的.NET应用,除此之外,还可以基于altermanager构建报警机制,实现自定义报警规则及时通知(通过email或钉钉等)。这里由于我司运维已经构建了,我就没有重复搭了。

682eb82b1a84a5d834cbe774d182611e.gif

年终总结:Edison的2021年终总结

数字化转型:我在传统企业做数字化转型

C#刷题:C#刷剑指Offer算法题系列文章目录

.NET面试:.NET开发面试知识体系

.NET大会:2020年中国.NET开发者大会PDF资料

4e657a7c1bc3af04e34476d932a425de.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php+对象+toarray_PHP 对象、数组间的转换

PHP 对象、数组间的转换/*** PHP 对象、数组间的转换** author flyer0126* since 2012/05/03**/// 1. 利用(array)和(object)&#xff0c;简单处理$objTemp (object)array();$objTemp->a 1;$objTemp->b 2;$objTemp->c 3;$arrTemp (array)$objTemp;print_r($objTe…

LeetCode之Happy Number

1、题目 Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process u…

高效沟通的7C原则

2019独角兽企业重金招聘Python工程师标准>>> 怎样确保沟通的顺畅和高效性呢&#xff1f;成功人士已经总结了很多方法&#xff0c;七项基本原则是一种基本的方法&#xff0c;起到了检查列表的作用&#xff0c;在你发送信息之前&#xff0c;对照检查可以帮助你确认信息…

ps切片导出时将切片选项选择为“所有用户切片”

ps切片导出时将切片选项选择为“所有用户切片”&#xff0c;可导出所有切中的区域。转载于:https://www.cnblogs.com/npk19195global/p/4513707.html

WTMPlus 1.4 Uniapp来了

点击上方蓝字关注我们1.4版本长期以来&#xff0c;WTM都是后台管理系统的开发利器&#xff0c;对于移动端支持的不够。这次WTMPlus 1.4我们加入了对UniApp的支持&#xff0c;你可以轻松的使用WTMPlus同时制作后台管理系统和各种移动端小程序了。前后台模式切换用户现在可以自由…

php真随机数,php 的伪随机数与真随机数实例详解

这篇文章主要介绍了PHP的伪随机数与真随机数详解,本文首先讲解了真随机数和伪随机数的相关概念,并给出了比用mt_rand()函数产生更好的伪随机数的一段例子代码,需要的朋友可以参考下首先需要声明的是&#xff0c;计算机不会产生绝对随机的随机数&#xff0c;计算机只能产生“伪随…

LeetCode之Power of Two

1、题目 Given an integer, write a function to determine if it is a power of two. Credits: Special thanks to jianchao.li.fighter for adding this problem and creating all test cases. Subscribe to see which companies asked this question. 2、分析 比如我们发…

代码的坏味道之一——译自《重构》

重复代码Duplicated Code 臭味集合里面排第一的就是重复代码了。如果你在不止一处发现了同样结构的代码&#xff0c;你可以确定如果你找到一种方法来统一他们的话&#xff0c;你的程序将会改善。 最简单的重复代码问题是当你在同一个类中有两个方法有相同的表达时出现的。那么你…

远程连接mysql速度慢的解决方法

PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。连接mysql速度慢的解决方法.…

C#中的表达式和运算符

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言今天和大家一起学习下C#中的表达式和运算符&#xff0c;都是很基础的知识点。在日常的编码过程中&#xff0c;对于表达式和运算符我们每天都在使用。比如像下面的代码int age27;就是一种表达式。运算符是一个符…

【转】jQuery中的bind(),live(),delegate(),on()事件绑定方式的区别

bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器。…

LeetCode之Two Sum II - Input array is sorted

1、题目 Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index…

php 怎么定义一个空对象,php定义空对象的方法

本文主要和大家分享php定义空对象的方法&#xff0c;有时候我们直接对不存在的数组直接定义其下标的值,不会报错,但是我们定义不存在的对象的时候,就会报错,这个时候我们定义一个空对象即可.有以下三种方法:<?php $obj1 new \stdClass;// Instantiate stdClass object$obj…

C#利用Socket实现客户端之间直接通信

2019独角兽企业重金招聘Python工程师标准>>> 实验功能&#xff1a; 设计程序&#xff0c;分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式&#xff0c;实现双方的数据的发送和接收&#xff08;S发给C&#xff0c…

如何在画面中摆放大量图片

2019独角兽企业重金招聘Python工程师标准>>> 有设计经验的一般都知道&#xff0c;版式设计需要对画面元素之间的关系有充分的认识&#xff0c;并能够在足够有限空间内合理布局&#xff0c;将图形与文字合理结合&#xff0c;下面就来给大家介绍下版式设计的方法。 如…

实现流水灯以间隔500ms的时间闪烁(系统定时器SysTick实现的精确延时)

/** ****************************************************************************** * file main.c * author iuc * version version 1.0 * date 2015-5-19 19:37:52 * brief 流水灯闪烁 ****************************************************************************** …

Android之解决360奇酷手机控制台打印全等级日志(默认只打印W、E等级日志)

1、问题 360奇酷手机很奇葩&#xff0c;默认安卓日志只打印等级W、E,现在我想打印所有等级日志 2、解决办法 1、在桌面点击拨号&#xff0c;在拨号盘输入“*20121220#”&#xff0c;进入工程模式; 2、点击“日志输出等级” 3、选择下面的选项 Log print enable 选 enable J…

php为什么在变量前加,php中变量前加、@等符号是什么意思?

如&#xff1a;$this->config &$config;如&#xff1a;if($_POST[add]){...}还有这个static function &instance() {static $object;if(empty($object)) {$object new self();}return $object;}分别都是什么意思和作用&#xff0c;请说明&#xff0c;感谢&#xf…

几个想法,有兴趣的可以深入下去

这些想法都是不成熟的想法&#xff0c;但是觉得会很有意思&#xff0c;先记于此&#xff0c;有兴趣的可以研究。 转载于:https://www.cnblogs.com/todoit/p/3793887.html

Windows获取CPU、内存和磁盘使用率脚本

获取CPU使用率脚本&#xff08;vbs&#xff09;&#xff0c;另存为cpu.vbs&#xff1a;On Error Resume Next Set objProc GetObject("winmgmts:\\.\root\cimv2:win32_processorcpu0") Wscript.Echo "CPU 使用率: " & objProc.LoadPercentage & …