基于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,一经查实,立即删除!

相关文章

高效沟通的7C原则

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

WTMPlus 1.4 Uniapp来了

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

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

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

C#中的表达式和运算符

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

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

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

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

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

ASP.NET Core 替换 Action 实际执行方法

RequestDelegate上次&#xff0c;我们在《如何判断当前请求的API类型》中查看endpoints.MapControllers()实现时&#xff0c;最终定位到ActionEndpointFactory.cs&#xff0c;其中有这样一段代码&#xff1a;private static RequestDelegate CreateRequestDelegate() {// We do…

最新版富文本编辑器UEditor操作教程

最近项目中使用到了富文本编辑器&#xff0c;选择的是百度的UEditor。所以对其进行了研究&#xff0c;发现最近发布了新版本&#xff0c;与以往的用法有的改变。一下对UEditotr 的是用做一下详细的介绍。 首先是UEditotr的下载&#xff0c;下载地址&#xff1a;http://ueditor.…

Servlet请求转发中文乱码解决

2019独角兽企业重金招聘Python工程师标准>>> 在Servlet的使用过程中&#xff0c;如果在请求转发的同时需要获得输出流并且写出数据的时候&#xff0c;需要设定resp 的编码格式&#xff0c;否则的话&#xff0c;跳转之后的页面很可能会出现中文乱码的问题。 转载于:h…

NodeJs .net core connect Azure service bus

最近有个项目需要使用nodejs 使用语言是Typescript 发送消息给Azure service bus消息格式是XML.但是发送到queue中并不是xml格式,而是string.string格式的消息直到看到azure/service-bus sdk 接口的定义才发现.如果接收消息应用不是javascript sdk框架(因为使用是.net sdk框架接…

c++代码寻找USB00端口并添加打印机

USB00*端口的背景 插入USB端口的打印机&#xff0c;安装打印机驱动&#xff0c;在控制面板设备与打印机处的打印机对象上右击&#xff0c;可以看到打印机端口。对于不少型号&#xff0c;这个端口是USB001或USB002之类的。 经观察&#xff0c;这些USB00*端口并不是打印机驱动所…

IOS调用WCF提供的服务方法,但是方法的参数是WCF那边自定义的对象,这样有办法调用么,如果可以IOS应该怎么传参呢?请问有了解的么,...

最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里&#xff1b;刚好把最近学习的WCF利用上&#xff0c;本以为是个比较简单的功能应该很好实现&#xff0c;没想到其中碰到不少问题&#xff0c;在网上搜索很久一直没有想到的解决方案&#xff0c;最后实现…

ABP vNext微服务架构详细教程——项目部署

1基础配置在之前的文章中&#xff0c;我们已经配置了Kubernetes集群并安装了管理工具Kubesphere&#xff0c;文章地址为&#xff1a;https://mp.weixin.qq.com/s/MgpdMv5A-fYxN7XY8N9Djw登录Kubesphere页面&#xff0c;打开工作台&#xff0c;在平台资源选项卡中点击“企业空间…

offsetTop和scrollTop的差别

近期想写个组件&#xff0c;结果被这两个属性搞的有点晕&#xff0c;查了下文档和资料&#xff0c;对这两个属性总结例如以下&#xff1a; 一直以来对offsetLeft&#xff0c;offsetTop&#xff0c;scrollLeft&#xff0c;scrollTop这几个方法非常迷糊&#xff0c;花了一天的时间…

quartz (一) 基于 Quartz 开发企业级任务调度应用

本文转自&#xff1a;http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/ Quartz 基本概念及原理 Quartz Scheduler 开源框架 Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目&#xff0c;完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购&…

C# 11 中的参数 null 检查

C# 11 中的参数 null 检查IntroC# 11 将引入一个新的操作符 !! 来简化我们代码中的对于参数的 null 检查&#xff0c;昨天发布的 .NET 7 Preview 1 已经支持了这一语法&#xff0c;感兴趣的不妨来试一下吧&#xff0c;下面我们就来看一下如何使用吧Prepare如果你想在本地代码中…

cms的 php代码,KingCMS/PHP可执行代码

实例:Example :{king:title/}{king:content/}作者:{king:_author/}上面的代码没有什么特别的地方&#xff0c;但客户的要求有了变化&#xff0c;他想在详细页的内容开始前调用缩略图&#xff0c;没有则忽略。所以问题也来了&#xff0c;因为有的文章有缩略图&#xff0c;有的没…

CentOS单机安装k8s并部署.NET 6程序

学习云原生&#xff0c;k8s 是一个基础&#xff0c;为了做一些实验&#xff0c;单机部署是最方便的&#xff0c;下面将介绍在 CentOS 中单机安装 k8s &#xff0c;并将一个 .NET 6 的程序发布到 k8s 中。环境宿主机&#xff1a;Mac 10.15.7CentOS版本&#xff1a;7.6内存&#…

php session缓存,扫盲:php session缓存至memcached中的方法

memcached是一套分布式的快取系统&#xff0c;当初是DangaInteractive为了LiveJournal所发展的&#xff0c;但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件&#xff0c;以BSDlicens更改为&#xff1a;session.save_handler memcachesession.save_path"tcp://12…

MASA Framework - DDD设计(2)

Clean Architecture国内对于Clean Architecture的翻译很多&#xff0c;干净/整洁/清晰。但无论哪一种都说明了它简洁、清晰的特性。早期它长这样看到这张图的同学可能会对另外一张图有印象洋葱架构(Onion)现在长这样看起来好像是亲戚&#xff0c;它们的确也有着千丝万缕的关系分…