350 lines
14 KiB
Markdown
350 lines
14 KiB
Markdown
|
---
|
|||
|
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
|
|||
|
---
|
|||
|
|
|||
|
## 监控概述
|
|||
|
|
|||
|
在 KVM(Kernel-based Virtual Machine)虚拟化环境中,监控是确保系统稳定性、性能优化和故障排查的重要手段。本文将探讨监控的必要性、基本原则以及常用的监控工具。
|
|||
|
|
|||
|
### 为什么需要监控?
|
|||
|
|
|||
|
- **确保系统稳定性**:
|
|||
|
- 通过监控系统资源使用情况和性能指标,可以及时发现潜在的问题,防止系统崩溃或服务中断。
|
|||
|
- 实时监控有助于预防性维护,提前识别并解决硬件或软件故障。
|
|||
|
- **优化性能**:
|
|||
|
- 监控数据提供了关于资源使用的详细信息,帮助管理员优化虚拟机配置和资源分配,以提高整体系统性能。
|
|||
|
- 通过性能趋势分析,可以发现并消除系统瓶颈,提升用户体验。
|
|||
|
- **故障排查**:
|
|||
|
- 监控日志和性能指标记录了系统运行的详细信息,帮助管理员快速定位和解决故障。
|
|||
|
- 实时报警功能可以在问题发生时立即通知管理员,减少故障排除时间和系统停机时间。
|
|||
|
- **容量规划**:
|
|||
|
- 监控资源使用趋势和增长情况,有助于进行合理的容量规划,确保系统在未来增长中仍能稳定运行。
|
|||
|
- 提前规划资源扩展,避免资源不足导致的性能下降。
|
|||
|
|
|||
|
### 监控的基本原则
|
|||
|
|
|||
|
| 原则 | 详细内容 |
|
|||
|
| -------------- | ------------------------------------------------------------ |
|
|||
|
| **全面覆盖** | 监控系统应覆盖所有关键组件,包括 CPU、内存、磁盘、网络等资源,以及虚拟机和宿主机的状态。 监控范围还应包括应用层面的性能指标,以全面掌握系统运行状况。 |
|
|||
|
| **实时性** | 监控系统应提供实时的数据采集和报警功能,确保在问题发生时能够立即响应。 实时监控有助于快速发现和解决突发问题,减少对业务的影响。 |
|
|||
|
| **历史记录** | 监控系统应保存历史数据,便于进行趋势分析和性能基线建立。 历史记录有助于识别长期趋势和周期性问题,进行有效的容量规划和性能优化。 |
|
|||
|
| **报警机制** | 监控系统应具备灵活的报警机制,根据预定义的阈值触发报警,通知管理员采取措施。 报警应支持多种通知方式(如邮件、短信、即时通讯工具),确保及时传达信息。 |
|
|||
|
| **可视化展示** | 监控数据应通过可视化的方式展示,便于管理员直观了解系统状态和性能指标。 可视化工具(如仪表盘、图表)有助于快速识别问题和进行数据分析。 |
|
|||
|
|
|||
|
### 常用的监控工具
|
|||
|
|
|||
|
| 工具 | 概述 | 特点 |
|
|||
|
| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
|||
|
| **Prometheus** | Prometheus 是一款开源的系统监控和报警工具,特别适用于云原生和容器化环境。 | 高效的数据采集和存储,强大的查询语言(PromQL),灵活的报警机制,丰富的可视化支持(如 Grafana)。 |
|
|||
|
| **Grafana** | Grafana 是一款开源的可视化和分析平台,用于展示和监控系统数据。 | 支持多种数据源(如 Prometheus、InfluxDB、Elasticsearch),强大的仪表盘和图表功能,灵活的报警和通知机制。 |
|
|||
|
| **Zabbix** | Zabbix 是一款开源的企业级监控解决方案,适用于大规模分布式系统的监控。 | 全面的监控功能,灵活的报警机制,强大的数据可视化和报告生成能力,广泛的社区支持。 |
|
|||
|
| **Nagios** | Nagios 是一款经典的开源监控工具,广泛应用于 IT 基础设施的监控。 | 灵活的插件机制,支持多种监控对象,可靠的报警和通知功能,丰富的社区插件。 |
|
|||
|
| **Collectd** | Collectd 是一款轻量级的系统统计收集工具,用于收集和传输系统性能数据。 | 高效的数据采集,多种插件支持,灵活的数据输出选项(如写入 InfluxDB、Graphite)。 |
|
|||
|
| **Telegraf** | Telegraf 是一个开源的服务器代理,用于收集和发送指标数据,作为 TICK(Telegraf, InfluxDB, Chronograf, Kapacitor)堆栈的一部分。 | 插件驱动的架构,支持多种输入和输出插件,易于集成和扩展。 |
|
|||
|
|
|||
|
## 使用内置工具监控
|
|||
|
|
|||
|
KVM(Kernel-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 读写情况。可以通过进程 ID(PID)进一步分析相关进程的具体操作和配置。
|
|||
|
|
|||
|
## 使用 `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 虚拟化环境中系统资源的使用情况,快速识别并解决性能问题,确保虚拟机和宿主机的稳定运行和高效性能。在实际应用中,应结合具体需求和环境特点,灵活使用这些工具进行系统监控和性能优化。
|