蚊章汇 - 监测
type: channel
link: https://linuxcn.bwsl.wang/tag/%E7%9B%91%E6%B5%8B/
items: 监测数据库的健康和行为：有哪些重要指标？
items: 理解监测指标，并使用 Python 去监测它们
items: Linux有问必答：如何检查Linux的内存使用状况

监测数据库的健康和行为：有哪些重要指标？
type: item
date: 2018-11-22T05:51:27+08:00
description: 对数据库的监测可能过于困难或者没有找到关键点。本文将讲述如何正确的监测数据库。我们没有对数据库讨论过多少。在这个充满监测仪器的时代，我们监测我们的应用程序、基础设施、甚至我们的用户，但有时忘记我们的数据库也值得被监测。这很大程度是因为数据库表现的很好，以至于我们单纯地信任它能把任务完成的很好。信任固然重要，但能够证明它的表现确实如我们所期待的那样就更好了。为什么监测你的数据库？监测数据库的原因有很多，其中大多数原因与监测系统的任何其他部分的原因相同：了解应用程序的各个组件中发生的什么，会让你成为更了解情况的，能够做出明智决策的开发人员。更具体地说，数据库是系统健康和行为的重要标志。数据库中的异常行为能够指出应用程序中出现问题的区域。另外，当应用程序中有异常行为时，你可以利用数据库的指标来迅速完成排除故障的过程。问题最轻微的调查揭示了监测数据库的一个问题：数据库有很多指标。说“很多”只是轻描淡写，如果你是 史高治 Scrooge McDuck （LCTT 译注：史高治，唐老鸭的舅舅，以一毛不拔著称），你不会放过任何一个可用的指标。如果这是 摔角狂热 Wrestlemania 比赛，那么指标就是折叠椅。监测所有指标似乎并不实用，那么你如何决定要监测哪些指标？解决方案开始监测数据库的最好方式是认识一些基础的数据库指标。这些指标为理解数据库的行为创造了良好的开端。吞吐量：数据库做了多少？开始检测数据库的最好方法是跟踪它所接到请求的数量。我们对数据库有较高期望；期望它能稳定的存储数据，并处理我们抛给它的所有查询，这些查询可能是一天一次大规模查询，或者是来自用户一天到晚的数百万次查询。吞吐量可以告诉我们数据库是否如我们期望的那样工作。你也可以将请求按照类型（读、写、服务器端、客户端等）分组，以开始分析流量。执行时间：数据库完成工作需要多长时间？这个指标看起来很明显，但往往被忽视了。你不仅想知道数据库收到了多少请求，还想知道数据库在每个请求上花费了多长时间。 然而，参考上下文来讨论执行时间非常重要：像 InfluxDB 这样的时间序列数据库中的慢与像 MySQL 这样的关系型数据库中的慢不一样。InfluxDB 中的慢可能意味着毫秒，而 MySQL 的 SLOW_QUERY 变量的默认值是 10 秒。监测执行时间和提高执行时间不一样，所以如果你的应用程序中有其他问题需要修复，那么请注意在优化上花费时间的诱惑。并发性：数据库同时做了多少工作？一旦你知道数据库正在处理多少请求以及每个请求需要多长时间，你就需要添加一层复杂性以开始从这些指标中获得实际值。如果数据库接收到十个请求，并且每个请求需要十秒钟来完成，那么数据库是忙碌了 100 秒、10 秒，还是介于两者之间？并发任务的数量改变了数据库资源的使用方式。当你考虑连接和线程的数量等问题时，你将开始对数据库指标有更全面的了解。并发性还能影响延迟，这不仅包括任务完成所需的时间（执行时间），还包括任务在处理之前需要等待的时间。利用率：数据库繁忙的时间百分比是多少？利用率是由吞吐量、执行时间和并发性的峰值所确定的数据库可用的频率，或者数据库太忙而不能响应请求的频率。该指标对于确定数据库的整体健康和性能特别有用。如果只能在 80% 的时间内响应请求，则可以重新分配资源、进行优化工作，或者进行更改以更接近高可用性。好消息监测和分析似乎非常困难，特别是因为我们大多数人不是数据库专家，我们可能没有时间去理解这些指标。但好消息是，大部分的工作已经为我们做好了。许多数据库都有一个内部性能数据库（Postgres：pg_stats、CouchDB：Runtime_Statistics、InfluxDB：_internal 等），数据库工程师设计该数据库来监测与该特定数据库有关的指标。你可以看到像慢速查询的数量一样广泛的内容，或者像数据库中每个事件的平均微秒一样详细的内容。结论数据库创建了足够的指标以使我们需要长时间研究，虽然内部性能数据库充满了有用的信息，但并不总是使你清楚应该关注哪些指标。从吞吐量、执行时间、并发性和利用率开始，它们为你提供了足够的信息，使你可以开始了解你的数据库中的情况。你在监视你的数据库吗？你发现哪些指标有用？告诉我吧！via: https://opensource.com/article/18/10/database-metrics-matter作者：Katy Farmer 选题：lujun9972 译者：ChiZelin 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

理解监测指标，并使用 Python 去监测它们
type: item
date: 2018-09-14T17:51:06+08:00
description: 通过学习这些关键的术语和概念来理解 Python 应用监测。当我第一次看到术语“ 计数器 counter ”和“ 计量器 gauge ”和使用颜色及标记着“平均数”和“大于 90%”的数字图表时，我的反应之一是逃避。就像我看到它们一样，我并不感兴趣，因为我不理解它们是干什么的或如何去使用。因为我的工作不需要我去注意它们，它们被我完全无视。这都是在两年以前的事了。随着我的职业发展，我希望去了解更多关于我们的网络应用程序的知识，而那个时候就是我开始去学习 监测指标 metrics 的时候。我的理解监测的学习之旅共有三个阶段（到目前为止），它们是：阶段 1：什么？（王顾左右）阶段 2：没有指标，我们真的是瞎撞。阶段 3：出现不合理的指标我们该如何做？我现在处于阶段 2，我将分享到目前为止我学到了些什么。我正在向阶段 3 进发，在本文结束的位置我提供了一些我正在使用的学习资源。我们开始吧！需要的软件在文章中讨论时用到的 demo 都可以在 我的 GitHub 仓库 中找到。你需要安装 docker 和 docker-compose 才能使用它们。为什么要监测？关于监测的主要原因是：理解 正常的 和 不正常的 系统和服务的特征做容量规划、弹性伸缩有助于排错了解软件/硬件改变的效果测量响应中的系统行为变化当系统出现意外行为时发出警报指标和指标类型从我们的用途来看，一个指标就是在一个给定时间点上的某些数量的 测量 值。博客文章的总点击次数、参与讨论的总人数、在缓存系统中数据没有被找到的次数、你的网站上的已登录用户数 —— 这些都是指标的例子。它们总体上可以分为三类：计数器以你的个人博客为例。你发布一篇文章后，过一段时间后，你希望去了解有多少点击量，这是一个只会增加的数字。这就是一个 计数器 counter 指标。在你的博客文章的生命周期中，它的值从 0 开始增加。用图表来表示，一个计数器看起来应该像下面的这样：一个计数器指标总是在增加的。计量器如果你想去跟踪你的博客每天或每周的点击量，而不是基于时间的总点击量。这种指标被称为一个 计量器 gauge ，它的值可上可下。用图表来表示，一个计量器看起来应该像下面的样子：一个计量器指标可以增加或减少。一个计量器的值在某些时间窗口内通常有一个 最大值 ceiling 和<ruby最小值floor。柱状图和计时器 柱状图 histogram （在 Prometheus 中这么叫它）或 计时器 timer （在 StatsD 中这么叫它）是一个跟踪 已采样的观测结果 的指标。不像一个计数器类或计量器类指标，柱状图指标的值并不是显示为上或下的样式。我知道这可能并没有太多的意义，并且可能和一个计量器图看上去没有什么不同。它们的不同之处在于，你期望使用柱状图数据来做什么，而不是与一个计量器图做比较。因此，监测系统需要知道那个指标是一个柱状图类型，它允许你去做哪些事情。一个柱状图指标可以增加或减少。Demo 1：计算和报告指标Demo 1 是使用 Flask 框架写的一个基本的 web 应用程序。它演示了我们如何去 计算 和 报告 指标。在 src 目录中有 app.py 和 src/helpers/middleware.py 应用程序，包含以下内容：from flask import request import csv import time def start_timer(): request.start_time = time.time() def stop_timer(response): # convert this into milliseconds for statsd resp_time = (time.time() - request.start_time)*1000 with open('metrics.csv', 'a', newline='') as f: csvwriter = csv.writer(f) csvwriter.writerow([str(int(time.time())), str(resp_time)]) return response def setup_metrics(app): app.before_request(start_timer) app.after_request(stop_timer)当在应用程序中调用 setup_metrics() 时，它配置在一个请求被处理之前调用 start_timer() 函数，然后在该请求处理之后、响应发送之前调用 stop_timer() 函数。在上面的函数中，我们写了时间戳并用它来计算处理请求所花费的时间。当我们在 demo1 目录中运行 docker-compose up，它会启动这个 web 应用程序，然后在一…

Linux有问必答：如何检查Linux的内存使用状况
type: item
date: 2015-02-06T17:24:00+08:00
description: 问题：我想要监测Linux系统的内存使用状况。有哪些可用的图形界面或者命令行工具来检查当前内存使用情况？当涉及到Linux系统性能优化的时候，物理内存是一个最重要的因素。自然的，Linux提供了丰富的选择来监测珍贵的内存资源的使用情况。不同的工具，在监测粒度（例如：全系统范围，每个进程，每个用户），接口方式（例如：图形用户界面，命令行，ncurses）或者运行模式（交互模式，批量处理模式）上都不尽相同。下面是一个可供选择的，但并不全面的图形或命令行工具列表，这些工具用来检查Linux平台中已用和可用的内存。1. /proc/meminfo一种最简单的方法是通过“/proc/meminfo”来检查内存使用状况。这个动态更新的虚拟文件事实上是诸如free，top和ps这些与内存相关的工具的信息来源。从可用/闲置物理内存数量到等待被写入缓存的数量或者已写回磁盘的数量，只要是你想要的关于内存使用的信息，“/proc/meminfo”应有尽有。特定进程的内存信息也可以通过“/proc//statm”和“/proc//status”来获取。$ cat /proc/meminfo 2. atopatop命令是用于终端环境的基于ncurses的交互式的系统和进程监测工具。它展示了动态更新的系统资源摘要（CPU, 内存, 网络, 输入/输出, 内核），并且用醒目的颜色把系统高负载的部分以警告信息标注出来。它同样提供了类似于top的线程（或用户）资源使用视图，因此系统管理员可以找到哪个进程或者用户导致的系统负载。内存统计报告包括了总计/闲置内存，缓存的/缓冲的内存和已提交的虚拟内存。$ sudo atop 3. freefree命令是一个用来获得内存使用概况的快速简单的方法，这些信息从“/proc/meminfo”获取。它提供了一个快照，用于展示总计/闲置的物理内存和系统交换区，以及已使用/闲置的内核缓冲区。$ free -h 4. GNOME System MonitorGNOME System Monitor 是一个图形界面应用，它展示了包括CPU，内存，交换区和网络在内的系统资源使用率的较近历史信息。它同时也可以提供一个带有CPU和内存使用情况的进程视图。$ gnome-system-monitor 5. htophtop命令是一个基于ncurses的交互式的进程视图，它实时展示了每个进程的内存使用情况。它可以报告所有运行中进程的常驻内存大小（RSS）、内存中程序的总大小、库大小、共享页面大小和脏页面大小。你可以横向或者纵向滚动进程列表进行查看。$ htop 6. KDE System Monitor就像GNOME桌面拥有GNOME System Monitor一样，KDE桌面也有它自己的对口应用：KDE System Monitor。这个工具的功能与GNOME版本极其相似，也就是说，它同样展示了一个关于系统资源使用情况，以及带有每个进程的CPU/内存消耗情况的实时历史记录。$ ksysguard 7. memstatmemstat工具对于识别正在消耗虚拟内存的可执行部分、进程和共享库非常有用。给出一个进程识别号，memstat即可识别出与之相关联的可执行部分、数据和共享库究竟使用了多少虚拟内存。$ memstat -p <PID> 8. nmonnmon工具是一个基于ncurses系统基准测试工具，它能够以交互方式监测CPU、内存、磁盘I/O、内核、文件系统以及网络资源。对于内存使用状况而言，它能够展示像总计/闲置内存、交换区、缓冲的/缓存的内存，虚拟内存页面换入换出的统计，所有这些都是实时的。$ nmon 9. psps命令能够实时展示每个进程的内存使用状况。内存使用报告里包括了 %MEM (物理内存使用百分比), VSZ (虚拟内存使用总量), 和 RSS (物理内存使用总量)。你可以使用“--sort”选项来对进程列表排序。例如，按照RSS降序排序：$ ps aux --sort -rss 10. smemsmem命令允许你测定不同进程和用户的物理内存使用状况，这些信息来源于“/proc”目录。它利用“按比例分配大小（PSS）”指标来精确量化Linux进程的有效内存使用情况。内存使用分析结果能够输出为柱状图或者饼图类的图形化图表。$ sudo smem --pie name -c "pss" 11. toptop命令提供了一个运行中进程的实时视图，以及特定进程的各种资源使用统计信息。与内存相关的信息包括 %MEM (内存使用率), VIRT (虚拟内存使用总量), SWAP (换出的虚拟内存使用量), CODE (分配给代码执行的物理内存数量), DATA (分配给非执行的数据的物理内存数量), RES (物理内存使用总量; COD…