1
0
wiki/FormalSciences/ComputerScience/OperatingSystem/Virtualization/2.KVM/7. KVM 系统监控.md
2024-10-13 20:52:05 +08:00

350 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 7. KVM 系统监控
description: 本文介绍了KVM虚拟化环境中的系统监控强调了监控的重要性并详细探讨了使用virsh、virt-top、top、htop、iotop和iftop等工具进行资源监控和性能优化的方法。
keywords:
- KVM
- 监控
- virsh
- virt-top
- top
- htop
- iotop
- iftop
tags:
- 技术/操作系统
- 虚拟化/KVM
author: 仲平
date: 2024-07-16
---
## 监控概述
在 KVMKernel-based Virtual Machine虚拟化环境中监控是确保系统稳定性、性能优化和故障排查的重要手段。本文将探讨监控的必要性、基本原则以及常用的监控工具。
### 为什么需要监控?
- **确保系统稳定性**
- 通过监控系统资源使用情况和性能指标,可以及时发现潜在的问题,防止系统崩溃或服务中断。
- 实时监控有助于预防性维护,提前识别并解决硬件或软件故障。
- **优化性能**
- 监控数据提供了关于资源使用的详细信息,帮助管理员优化虚拟机配置和资源分配,以提高整体系统性能。
- 通过性能趋势分析,可以发现并消除系统瓶颈,提升用户体验。
- **故障排查**
- 监控日志和性能指标记录了系统运行的详细信息,帮助管理员快速定位和解决故障。
- 实时报警功能可以在问题发生时立即通知管理员,减少故障排除时间和系统停机时间。
- **容量规划**
- 监控资源使用趋势和增长情况,有助于进行合理的容量规划,确保系统在未来增长中仍能稳定运行。
- 提前规划资源扩展,避免资源不足导致的性能下降。
### 监控的基本原则
| 原则 | 详细内容 |
| -------------- | ------------------------------------------------------------ |
| **全面覆盖** | 监控系统应覆盖所有关键组件,包括 CPU、内存、磁盘、网络等资源以及虚拟机和宿主机的状态。 监控范围还应包括应用层面的性能指标,以全面掌握系统运行状况。 |
| **实时性** | 监控系统应提供实时的数据采集和报警功能,确保在问题发生时能够立即响应。 实时监控有助于快速发现和解决突发问题,减少对业务的影响。 |
| **历史记录** | 监控系统应保存历史数据,便于进行趋势分析和性能基线建立。 历史记录有助于识别长期趋势和周期性问题,进行有效的容量规划和性能优化。 |
| **报警机制** | 监控系统应具备灵活的报警机制,根据预定义的阈值触发报警,通知管理员采取措施。 报警应支持多种通知方式(如邮件、短信、即时通讯工具),确保及时传达信息。 |
| **可视化展示** | 监控数据应通过可视化的方式展示,便于管理员直观了解系统状态和性能指标。 可视化工具(如仪表盘、图表)有助于快速识别问题和进行数据分析。 |
### 常用的监控工具
| 工具 | 概述 | 特点 |
| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **Prometheus** | Prometheus 是一款开源的系统监控和报警工具,特别适用于云原生和容器化环境。 | 高效的数据采集和存储强大的查询语言PromQL灵活的报警机制丰富的可视化支持如 Grafana。 |
| **Grafana** | Grafana 是一款开源的可视化和分析平台,用于展示和监控系统数据。 | 支持多种数据源(如 Prometheus、InfluxDB、Elasticsearch强大的仪表盘和图表功能灵活的报警和通知机制。 |
| **Zabbix** | Zabbix 是一款开源的企业级监控解决方案,适用于大规模分布式系统的监控。 | 全面的监控功能,灵活的报警机制,强大的数据可视化和报告生成能力,广泛的社区支持。 |
| **Nagios** | Nagios 是一款经典的开源监控工具,广泛应用于 IT 基础设施的监控。 | 灵活的插件机制,支持多种监控对象,可靠的报警和通知功能,丰富的社区插件。 |
| **Collectd** | Collectd 是一款轻量级的系统统计收集工具,用于收集和传输系统性能数据。 | 高效的数据采集,多种插件支持,灵活的数据输出选项(如写入 InfluxDB、Graphite。 |
| **Telegraf** | Telegraf 是一个开源的服务器代理,用于收集和发送指标数据,作为 TICKTelegraf, InfluxDB, Chronograf, Kapacitor堆栈的一部分。 | 插件驱动的架构,支持多种输入和输出插件,易于集成和扩展。 |
## 使用内置工具监控
KVMKernel-based Virtual Machine环境中内置的监控工具如 `virsh``virt-top` 提供了便捷的虚拟机监控方法,帮助管理员实时了解虚拟机的运行状态和资源使用情况。本文将详细介绍如何使用 `virsh``virt-top` 进行监控。
### 使用 `virsh` 进行监控
`virsh` 是 libvirt 提供的命令行工具,用于管理和监控 KVM 虚拟机。通过 `virsh` 命令,可以查看虚拟机的信息和资源使用情况。
#### 查看虚拟机信息
使用 `virsh` 命令可以查看虚拟机的基本信息,包括状态、配置和资源分配情况:
1. **列出所有虚拟机**
```shell
virsh list --all
```
输出示例:
```
Id Name State
----------------------------------------------------
1 myvm running
- testvm shut off
```
2. **查看虚拟机详细信息**
```shell
virsh dominfo <VM名>
```
输出示例:
```text
Id: 1
Name: myvm
UUID: 2d4c3b1c-467d-4b88-8f0d-5b63a3c6e29d
OS Type: hvm
State: running
CPU(s): 4
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: disable
Managed save: no
```
#### 监控资源使用情况
通过 `virsh` 命令,可以监控虚拟机的实时资源使用情况,包括 CPU 和内存使用情况:
1. **查看虚拟机 CPU 和内存使用情况**
```shell
virsh domstats <VM名>
```
输出示例:
```text
Domain: 'myvm'
state.state=1
state.reason=1
cpu.time=1234567890
cpu.user=234567890
cpu.system=34567890
balloon.current=2097152
balloon.maximum=2097152
balloon.swap_in=0
balloon.swap_out=0
balloon.major_fault=0
balloon.minor_fault=12345
balloon.usable=1987654
...
```
2. **查看所有虚拟机的资源使用情况**
```shell
virsh list --all --name | xargs -I{} virsh domstats {}
```
该命令将列出所有虚拟机的资源使用统计信息,便于管理员进行整体监控。
### 使用 `virt-top` 监控
`virt-top` 是一个类似于 `top` 的命令行工具,用于实时监控 KVM 虚拟机的性能和资源使用情况。通过 `virt-top`,管理员可以直观地查看每个虚拟机的 CPU、内存、磁盘和网络使用情况。
#### 安装和配置 `virt-top`
1. **安装 `virt-top`**
```shell
## 在基于 Debian 的系统(如 Ubuntu
sudo apt-get install virt-top
## 在基于 RHEL 的系统(如 CentOS
sudo yum install virt-top
```
1. **配置 `virt-top`**
安装完成后,运行 `virt-top` 命令启动监控:
```shell
sudo virt-top
```
### 使用 `virt-top` 查看虚拟机性能
`virt-top` 提供了一个交互式界面,显示每个虚拟机的详细性能数据:
1. **启动 `virt-top`**
```shell
sudo virt-top
```
输出示例:
```text
virt-top 0.5.12 x86_64 libvirt 6.0.0
2 domains, 1 active, 1 running, 0 sleeping, 0 paused, 0 inactive D:0 O:0 X:0
CPU: 2.0% Mem: 2097152 kB (64.0%) RSS: 512 MB
Domains: 2 ID S RDRQ RDRS WRRQ WRRS RXBY TXBY %CPU %MEM
1 myvm 1 R 0 0 0 0 0 0 2.0 64.0
```
2. **查看具体虚拟机的详细信息**
-`virt-top` 界面中,使用箭头键选择具体的虚拟机,然后按回车键查看详细信息。
- 可以查看的性能指标包括CPU 使用率、内存使用率、磁盘读写、网络接收和发送等。
3. **自定义视图和排序**
-`f` 键选择要显示的字段,可以选择 CPU、内存、磁盘、网络等不同的监控指标。
-`s` 键选择排序方式,可以按 CPU 使用率、内存使用率、磁盘 I/O 等进行排序,方便定位高负载的虚拟机。
通过使用 `virsh``virt-top` 工具,管理员可以方便地监控 KVM 虚拟化环境中虚拟机的运行状态和资源使用情况。这些工具提供了丰富的命令和参数,可以满足大部分日常监控和性能分析的需求。在实际应用中,应根据具体需求和环境特点,选择合适的监控工具和方法,以确保虚拟机和宿主机的稳定运行和高效性能。
## 使用系统监控工具
除了专门的虚拟化监控工具,系统自带的监控工具如 `top`、`htop`、`iotop` 和 `iftop` 也可以用来监控 KVM 虚拟化环境中的性能。本文将详细介绍这些工具的使用方法,包括查看系统整体性能、监控虚拟机的资源占用、监控磁盘 I/O 性能以及监控网络流量。
## 使用 `top` 和 `htop`
### 查看系统整体性能
`top``htop` 是常用的系统性能监控工具,提供了关于系统资源使用的实时信息:
1. **使用 `top` 查看系统性能**:启动 `top`
```shell
top
```
输出示例:
```text
top - 14:55:30 up 10 days, 2:48, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 2048.0 total, 104.0 free, 512.0 used, 1432.0 buff/cache
KiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 1480.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 162180 7644 4388 S 0.3 0.4 0:00.03 qemu-kvm
...
```
该命令显示系统的 CPU、内存使用情况以及每个进程的资源占用。
2. **使用 `htop` 查看系统性能**:启动 `htop`(如果未安装,可以通过 `sudo apt-get install htop``sudo yum install htop` 安装):
```shell
htop
```
`htop` 提供了比 `top` 更友好的界面,支持鼠标操作和自定义视图。可以使用上下箭头键浏览进程,使用 F2 键进入设置界面。
### 监控虚拟机的资源占用
`top``htop` 中,可以通过筛选 KVM 相关进程来监控虚拟机的资源占用情况:
1. **使用 `top` 监控虚拟机资源占用**
启动 `top` 后,按 `u` 键,然后输入虚拟机所属用户(通常是 qemu 或 libvirt按回车键
```shell
top -u qemu
```
该命令将只显示属于该用户的进程,包括 KVM 虚拟机进程。
2. **使用 `htop` 监控虚拟机资源占用**:启动 `htop` 后,按 `F4` 键进入过滤模式,然后输入 `qemu` 或虚拟机进程名:
```shell
htop
```
## 使用 `iotop`
`iotop` 是一个用于监控磁盘 I/O 性能的工具,可以帮助找出性能瓶颈。需要 root 权限运行。
### 监控磁盘 I/O 性能
1. **安装 `iotop`**
```shell
# 在基于Debian的系统上
sudo apt-get install iotop
# 在基于RHEL的系统上
sudo yum install iotop
```
2. **启动 `iotop`**
```shell
sudo iotop
```
输出示例:
```text
less复制代码Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1234 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:1]
...
```
`iotop` 显示每个进程的实时磁盘读写速度,帮助管理员识别高 I/O 负载进程。
### 找出性能瓶颈
1. **通过排序和过滤找出 I/O 瓶颈**
-`iotop` 界面中,按 `O` 键只显示正在进行 I/O 操作的进程。
-`P` 键根据 I/O 优先级排序,或按 `T` 键根据线程排序,快速定位高 I/O 负载进程。
2. **查看具体进程的 I/O 使用情况**
- 使用上下箭头键选择具体进程,查看详细的 I/O 读写情况。可以通过进程 IDPID进一步分析相关进程的具体操作和配置。
## 使用 `iftop`
`iftop` 是一个实时网络流量监控工具,可以帮助分析网络性能问题。
### 监控网络流量
1. **安装 `iftop`**
```shell
## 在基于 Debian 的系统上
sudo apt-get install iftop
## 在基于 RHEL 的系统上
sudo yum install iftop
```
2. **启动 `iftop`**
```shell
sudo iftop
```
输出示例:
```text
interface: eth0
IP address is: 192.168.1.10
MAC address is: 00:1a:4b:16:01:59
Listening on port 0000
---------------------------------------------------
192.168.1.10 => 192.168.1.1 123KB 456KB 789KB
<= 23KB 56KB 89KB
...
```
`iftop` 显示网络接口的实时流量情况,包括发送和接收数据的速率。
### 分析网络性能问题
1. **通过排序和过滤分析流量**
-`iftop` 界面中,按 `P` 键切换端口显示模式,按 `N` 键切换主机名显示模式,按 `S` 键切换源地址和目的地址显示顺序。
- 使用 `l` 键限制显示特定网络接口的流量,帮助聚焦分析特定接口的网络性能。
2. **查看具体连接的流量使用情况**
- 使用上下箭头键选择具体连接,查看详细的流量使用情况。可以进一步分析哪些主机或服务占用了过多的网络带宽。
通过使用系统监控工具如 `top`、`htop`、`iotop` 和 `iftop`,管理员可以实时了解 KVM 虚拟化环境中系统资源的使用情况,快速识别并解决性能问题,确保虚拟机和宿主机的稳定运行和高效性能。在实际应用中,应结合具体需求和环境特点,灵活使用这些工具进行系统监控和性能优化。