外观
什么是Grafana?
约 6870 字大约 23 分钟
2025-09-23
Grafana 是一款开源的数据可视化和监控分析软件,其核心功能是允许用户查询、可视化、告警和探索存储在任意位置的指标、日志和追踪数据。作为领先的开源、跨平台时间序列分析和监控可视化平台,Grafana 不直接存储数据,而是专注于查询、可视化、告警以及理解来自各种数据源的指标。
Grafana 的独特之处在于其采用 "统一数据而非数据库" 的方法提供单一数据面板。与传统方案不同,Grafana 不要求用户将数据导入后端数据仓库或供应商数据库,而是能够统一现有数据,无论数据存储在何处。这种架构设计使得用户可以从 Kubernetes 集群、Raspberry Pi、不同云服务甚至 Google Sheets 等各种来源获取数据,并在单个数据面板中按照需求进行可视化。
在技术定位上,Grafana 是开源的可视化与监控分析平台,支持多数据源集成,专注于时序数据的实时展示、告警与交互式分析。其核心目标是 "让数据可视化更简单",通过将各类数据源的信息转化为直观、可交互的仪表盘,帮助用户实时监控系统性能、业务指标、设备状态等关键数据。
一、技术架构与核心组件
Grafana 采用现代化的技术架构,主要分为后端服务和前端界面两大核心部分:
后端服务使用 Go 语言编写,负责处理 API 请求、数据源连接和用户身份验证等功能。核心组件包括:
- HTTP API 层:提供 RESTful 接口,支持所有前端操作
- 查询引擎:负责数据源查询的统一抽象和优化
- 渲染引擎:将查询结果转换为可视化图表
- 告警引擎:基于规则的告警评估和通知
- 存储层:使用 SQLite/MySQL/PostgreSQL 存储配置信息
前端界面使用 TypeScript 和 React 构建,负责渲染可视化面板和用户交互。用户通过浏览器访问 Grafana 的 Web UI 进行数据可视化和仪表盘管理。
Grafana 的整体架构还包括以下关键组件:
- 用户界面:友好的操作界面,支持用户自定义仪表板
- API 处理模块:负责与不同数据源进行交互的中心
- 数据处理模块:接收、处理并返回数据
Grafana 通过插件机制集成多种数据库、监控系统和 API,支持的数据源类型包括:
- 时序数据库:Prometheus、InfluxDB、Graphite
- 日志与搜索:Elasticsearch、Loki
- 关系型数据库:MySQL、PostgreSQL
二、Grafana 主要功能详解
2.1 数据可视化功能体系
Grafana 提供了极其丰富的可视化类型,能够满足各种数据展示需求。根据功能特性,Grafana 的可视化可以分为以下几大类:
2.1.1 图表类可视化
Grafana 支持的主要图表类型包括:
| 图表类型 | 功能描述 | 典型应用场景 |
|---|---|---|
| 时间序列(Time Series) | 默认的主要图表可视化,显示随时间变化的数据趋势 | 服务器指标监控、应用性能追踪、业务指标趋势分析 |
| 状态时间线(State Timeline) | 显示状态随时间的变化 | 服务状态变更、任务执行状态、系统故障时间线 |
| 状态历史(Status History) | 显示周期性状态随时间的变化 | 周期性任务状态、批处理作业状态 |
| 条形图(Bar Chart) | 显示分类数据的比较 | 不同服务性能对比、地区业务量比较、产品销售对比 |
| 直方图(Histogram) | 计算并显示值在条形图中的分布 | 响应时间分布、请求量分布、错误码分布 |
| 热力图(Heatmap) | 显示值在时间上的分布 | 流量热点分析、用户活动热力分布、系统负载分布 |
| 饼图(Pie Chart) | 显示数据的构成比例 | 资源使用占比、错误类型分布、业务渠道贡献 |
| 烛台图(Candlestick) | 显示开盘、高、低、收盘四个核心维度 | 金融市场数据、性能指标波动范围 |
| 仪表盘(Gauge) | 显示单个值与最小值和最大值的关系 | 资源使用率、容量占用率、健康度评分 |
| 趋势图(Trend) | 显示数据的趋势变化 | 性能趋势预测、容量规划分析 |
| XY 图表(XY Chart) | 可视化任意 x 和 y 值,显示两个变量之间的关系 | 相关性分析、散点图、气泡图 |
| |
2.1.2 统计类可视化
统计类可视化主要用于显示数值和统计信息:
- Stat(统计数据):显示大数字和统计信息,支持多种格式和颜色编码
- Bar Gauge(条形仪表盘):水平或垂直的条形仪表盘,用于显示数值与范围的关系
2.1.3 其他类型可视化
Grafana 还提供了多种其他类型的可视化组件:
- 表格(Table):以表格形式显示详细数据
- 日志(Logs):专门用于显示日志数据
- 节点图(Node Graph):使用有向力布局显示节点关系,可用于展示复杂的基础设施映射、层次结构或执行图
- 追踪(Traces):显示分布式追踪数据
- 火焰图(Flame Graph):显示性能剖析数据
- 画布(Canvas):自由布局容器,用于创建自定义仪表板布局
- 地理地图(Geomap):基于地理位置显示数据分布
- 数据网格(Datagrid):以网格形式显示结构化数据 此外,Grafana 还提供了多种小部件:
- 仪表板列表(Dashboard List)
- 告警列表(Alert List)
- 注释列表(Annotations List)
- 文本(Text):支持 Markdown 和 HTML 格式
- 新闻(News):显示 RSS/Atom 新闻源
Grafana 还支持通过插件扩展可视化类型。例如,Business Charts 面板允许将 Apache ECharts 库创建的图表和图形集成到 Grafana 仪表板中,ECharts 是一个功能强大且多功能的数据可视化库,提供了广泛的图表类型,包括统计功能。
2.2 数据源支持能力
Grafana 的一个核心优势是其强大的数据源支持能力。官方支持的数据源包括:
- 时序数据库:Graphite、Prometheus、InfluxDB、OpenTSDB
- 日志系统:Elasticsearch、Loki
- 云监控服务:Google Stackdriver、AWS CloudWatch、Azure Monitor
- 关系型数据库:MySQL、PostgreSQL、Microsoft SQL Server (MSSQL)
- 其他:Test Data
除了官方支持的数据源,Grafana 还通过插件系统支持大量第三方数据源。Grafana 插件库中包含了丰富的数据源插件,包括:
- 企业数据源:Amazon Aurora、Azure Cosmos DB、Azure DevOps、Catchpoint、Cloudflare、CockroachDB、Databricks、Datadog、Drone 等
- 其他数据源:Jira、Snowflake、Google Sheets 等
- Grafana 支持的数据源类型极其广泛,包括:
- 时序数据库:Prometheus、InfluxDB、Graphite
- 日志与搜索:Elasticsearch、Loki
- 关系型数据库:MySQL、PostgreSQL
2.3 告警功能详解
Grafana 提供了强大而灵活的告警功能,基于 Prometheus 告警系统模型构建。
2.3.1 告警系统架构
Grafana 告警系统基于 Prometheus 告警系统模型,包含两个主要组件:
- 告警生成器:评估告警规则,周期性查询数据源并评估告警规则中定义的条件
- 告警接收器(Alertmanager):接收告警并负责发送通知
2.3.2 告警规则定义
告警规则是一组评估标准,用于确定告警何时触发。一个完整的告警规则包含:
- 查询和表达式:一个或多个查询和 / 或表达式,用于选择要评估的数据集
- 告警条件(阈值):查询必须满足或超过才能触发告警实例的条件
- 评估频率:指定告警规则评估频率的时间间隔
- 持续时间:指定条件必须满足多长时间才能触发告警实例
- 其他选项:管理告警事件及其通知的附加选项
Grafana 支持两种类型的告警规则:
- Grafana 管理的告警规则:推荐选项,是最灵活的告警规则类型,允许创建对任何支持数据源的数据起作用的告警
- 外部告警规则:与外部 Alertmanager 集成的告警规则
2.3.3 告警实例机制
告警实例是告警系统的核心概念。每个告警规则可以产生多个告警实例(每个时间序列一个),这使得在单个表达式中观察多个序列成为可能。
例如,使用以下 PromQL 表达式的规则:
sum by(cpu) (
rate(node\_cpu\_seconds\_total{mode!="idle"}\[1m])
)该规则在第一次评估后会为每个 CPU 创建多个告警实例,使单个规则能够报告每个 CPU 的状态。
2.3.4 通知机制
Grafana 告警系统的通知机制包括以下组件:
- 联系点(Contact Points):定义告警通知的发送目标,如邮件、Slack、PagerDuty 等
- 通知消息:默认包含告警详细信息,如告警数量、状态和注释,也可以自定义
- 通知策略:通过标签匹配将告警路由到联系点。每个通知策略由一组标签匹配器(0 个或多个)组成,指定它们处理哪些告警实例(通过标签标识)。通知策略采用树结构定义,根是默认通知策略,确保所有告警实例都得到处理
- 静默和静音时间:用于在特定时间或条件下抑制告警通知
2.3.5 告警管理功能
Grafana 告警系统还提供了以下管理功能:
- 告警规则管理:可以创建、编辑、删除告警规则,支持批量操作
- 告警状态监控:实时查看告警规则的运行状态和健康状况
- 告警历史查询:查看告警触发历史和通知发送记录
- 告警抑制机制:支持基于标签的告警抑制,避免重复通知
2.4 插件生态系统
Grafana 拥有丰富的插件生态系统,这是其灵活性和扩展性的重要体现。Grafana 支持三种主要插件类型:
2.4.1 插件类型详解
| 插件类型 | 功能描述 | 典型应用场景 |
|---|---|---|
| 面板插件(Panel Plugins) | 创建和添加各种面板来展示数据或改进仪表板 | 自定义图表类型、特殊数据展示需求、行业特定可视化 |
| 数据源插件(Data Source Plugins) | 连接到新的数据库或其他数据源 | 支持非标准数据源、自定义 API 集成、特定业务系统对接 |
| 应用程序插件(App Plugins) | 为 Grafana 添加定制页面,也可以捆绑仪表板和其他插件 | 集成外部服务、添加新功能模块、创建行业解决方案 |
除了这三种主要类型,Grafana 还支持仪表板插件,允许用户在一个仪表板内整合多个数据源和面板。
2.4.2 插件功能分类
从功能角度,Grafana 插件可以分为以下几类:
- 数据展示类插件:
- 图表插件:以折线图、柱状图、饼图等形式展示时间序列数据
- 表格插件:提供精细的数据点展示方式
- 地图插件:根据地理位置展示数据(如全球服务器健康状态)
- 数据处理类插件:专注于对收集的数据进行转换和增强,以适应更复杂的数据分析和可视化需求
- 数据源插件:这是 Grafana 的核心,提供与各种数据存储的接口,如 Prometheus、MySQL、Elasticsearch 等
- 应用程序插件:为 Grafana 增添新功能,如日志探索、云监控、报表等功能
2.4.3 插件架构演进
Grafana 插件架构经历了重要演进。在 3.0 版本中,Grafana 重构了数据源插件架构并添加了两种新插件类型:
- 面板插件:允许为仪表板添加新的面板类型
- 应用程序插件:捆绑面板插件、数据源插件、仪表板和 Grafana 页面 此外,Grafana 还引入了后端插件概念,数据源后端插件是现有数据源插件的新组件。
2.4.4 插件管理与安装
Grafana 提供了完善的插件管理功能:
- 插件目录:官方插件目录包含大量经过验证的插件,用户可以轻松浏览和安装
- 安装方式:支持通过 Grafana 界面直接安装、命令行安装、以及从本地文件安装
- 版本管理:支持插件版本管理和更新
- 安全管理:企业版提供插件签名验证功能
2.4.5 核心插件与扩展插件
Grafana 插件分为两类:
- 核心插件:默认提供的插件,包括流行的数据源和面板可视化,标记为 "core",默认安装且无法删除
- 扩展插件:用户可以根据需要安装的其他插件
例如,Business Media 插件是一个功能强大的 Grafana 插件,设计用于显示各种媒体文件,包括 PNG、JPG、GIF、MP4、WEBM、MP3、OGG 和 PDF,使用 base64 编码或直接 URL,能够轻松地将多媒体内容无缝集成到 Grafana 仪表板中。
2.5 API 接口与可编程性
Grafana 提供了全面的 HTTP API,这是前端用于执行所有操作(如保存仪表板、创建用户、更新数据源)的相同 API。
2.5.1 API 架构与设计
Grafana 后端暴露的 HTTP API 具有以下特点:
- RESTful 设计:采用 RESTful 架构风格,资源清晰
- 认证机制:支持 API 密钥认证,用户可以在侧边菜单的组织下拉菜单中选择 API 密钥选项,在所有请求的 Authorization 头中使用令牌
- 版本管理:API 具有版本控制机制
2.5.2 主要 API 端点
Grafana 提供了丰富的 API 端点,包括但不限于:
- 仪表板 API:
- POST /api/dashboards/db:创建或更新仪表板
- 支持使用唯一标识符(UID)在多个 Grafana 安装之间唯一标识仪表板
- 仪表板 ID 是自动递增的数值,仅在每个 Grafana 安装中唯一
- 组织 API: * 管理组织信息和权限 * 企业版需要特定权限才能访问某些端点
- 认证 API:
- 用户认证和会话管理
- API 密钥管理
- 数据源 API:
- 数据源的创建、更新和删除
- 数据源连接测试
- 用户 API:
- 用户管理和权限控制
- 需要基本认证且认证用户必须是 Grafana 管理员
- 文件夹 API:
- 文件夹的创建、更新和删除
- 文件夹的唯一标识符(UID)可用于在组织内唯一标识文件夹,允许在多个 Grafana 安装之间同步时具有一致的 URL
2.5.3 服务账户与 API 令牌
Grafana 还提供了 ** 服务账户(Service Account)** 机制:
- 服务账户令牌可以访问组织的所有操作
- 服务账户令牌与组织相关联
- 可用于为该组织创建仪表板和其他特定组件
2.5.4 API 使用场景
Grafana API 的典型使用场景包括:
- 自动化部署:通过 API 批量创建仪表板、数据源和用户
- 集成其他系统:将 Grafana 功能集成到其他业务系统中
- 自定义监控:创建自定义的监控和告警逻辑
- 数据迁移:在不同 Grafana 实例之间迁移数据
- CI/CD 集成:在持续集成和持续部署流程中集成 Grafana
2.5.5 API 最佳实践
使用 Grafana API 的最佳实践包括:
- 使用 HTTPS 确保通信安全
- 妥善管理 API 密钥,避免泄露
- 实现适当的错误处理
- 遵循 API 速率限制
- 使用版本化的 API 端点
2.6 查询和转换功能
Grafana 提供了强大的查询和数据转换功能,这是其数据处理能力的重要体现。
2.6.1 数据转换功能
Grafana 的 **"转换" 功能 ** 允许用户对多个查询和数据源执行以下操作:
- 重命名
- 汇总
- 合并
- 计算
只需几秒钟,即可将非时间序列数据转换为表格(例如:JSON 文件或简单的查找表),而无需自定义内容或产生额外开销。
2.6.2 查询语言支持
Grafana 支持多种查询语言,具体取决于数据源:
- PromQL:用于 Prometheus 数据源,支持复杂的时间序列查询和聚合
- InfluxQL:用于 InfluxDB 数据源
- Elasticsearch Query DSL:用于 Elasticsearch 数据源
- LogQL:用于 Loki 日志数据源
- SQL:用于关系型数据库数据源
2.6.3 查询优化与缓存
Grafana 提供了以下查询优化功能:
- 查询缓存:缓存频繁执行的查询结果
- 查询并行化:同时执行多个查询以提高效率
- 查询超时控制:防止长时间运行的查询影响系统性能
- 查询历史:保存查询历史以便重复使用
2.6.4 数据处理管道
Grafana 的数据处理流程包括:
- 数据接收:接收数据源返回的原始数据
- 数据处理:进行一系列处理,包括数据转换、聚合、排序和过滤等
- 数据可视化:将处理后的数据转换为可视化图表
2.6.5 自定义查询功能
Grafana 还提供了以下高级查询功能:
- 变量模板:支持使用变量创建动态查询
- 子查询:支持在查询中嵌套子查询
- 函数支持:提供丰富的内置函数用于数据处理和计算
- 条件查询:支持基于条件的查询过滤
三、Grafana 应用场景分析
3.1 企业监控场景
Grafana 在企业监控领域应用广泛,能够满足从基础设施到应用程序的全方位监控需求。
3.1.1 基础设施监控
在基础设施监控方面,Grafana 可以监控以下核心指标:
| 监控类别 | 具体指标 | 监控频率 | 告警阈值建议 |
|---|---|---|---|
| CPU 监控 | CPU 使用率、CPU 负载、各 CPU 核心使用率 | 秒级(<1s) | >80% 持续 5 分钟 |
| 内存监控 | 内存使用率、可用内存、内存交换 | 秒级(<1s) | >80% 持续 5 分钟 |
| 磁盘监控 | 磁盘使用率、磁盘 I/O、inode 使用率 | 秒级(<1s) | >85% 持续 5 分钟 |
| 网络监控 | 网络流量、网络延迟、数据包丢失率 | 秒级(<1s) | >90% 带宽或丢包率 > 1% |
Grafana 的基础设施监控解决方案具有以下特点:
- 数据中心监控:监控服务器硬件状态、磁盘空间、内存利用率、网络流量等
- 云环境监控:监控 AWS、Azure、Google Cloud 等公有云资源使用情况
- 实时可视化:秒级刷新,一键定位瓶颈,排查效率提升 80%
- 全面覆盖:覆盖 CPU、内存、磁盘、网络等核心指标,秒级数据采集,延迟小于 1 秒
3.1.2 应用性能监控
Grafana 在应用性能监控方面的应用包括:
- Web 应用监控:
- 响应时间监控:确保用户体验良好
- 并发用户数:监控系统负载情况
- 请求成功率:监控服务健康状态
- 数据库监控:
- 查询性能监控:监控慢查询和查询执行时间
- 资源利用率:监控数据库连接数、锁竞争等
- 慢查询分析:识别性能瓶颈
- 中间件监控:
- 消息队列监控:监控队列长度、消费速度
- 缓存监控:监控缓存命中率、内存使用
- 应用服务器监控:监控 JVM 状态、线程池使用
3.1.3 容器与 Kubernetes 监控
Grafana 在容器和 Kubernetes 监控方面表现出色:
- Kubernetes 集群监控:
- 集群概览:显示集群、节点、Pod 和容器数量快照
- 资源监控:监控 CPU、内存、存储使用情况
- 工作负载监控:监控 Deployment、StatefulSet、DaemonSet 状态
- 容器监控:
- 容器资源使用:CPU、内存、网络、磁盘 I/O
- 容器状态:运行状态、重启次数、健康检查结果
- 容器日志:实时查看容器日志
- 服务网格监控:
- 服务间调用监控:监控微服务之间的调用关系和性能
- 流量监控:监控服务间流量分布
- 错误率监控:监控服务调用错误率
Grafana Cloud 的 Kubernetes 监控解决方案以 60 秒的采集间隔采集一组默认指标,并包含一套告警规则,帮助设置和运行集群及其工作负载的告警。
3.1.4 网络监控
Grafana 可以监控网络健康和性能指标:
- 流量监控:监控网络流量大小和趋势
- 延迟监控:监控网络延迟和响应时间
- 丢包率监控:监控数据包丢失情况
- 设备状态:监控网络设备(路由器、交换机等)的运行状态
3.2 数据分析场景
Grafana 不仅是监控工具,也是强大的数据分析平台,在各种数据分析场景中发挥重要作用。
3.2.1 业务指标分析
Grafana 在业务指标分析方面的应用包括:
- 实时业务监控:
- 订单监控:实时监控订单量、销售额、支付转化率
- 用户行为分析:监控用户注册数、活跃度、留存率
- 营销效果分析:监控广告点击、转化率、ROI
- 业务运营监控:
- 库存监控:实时监控库存水平、周转率
- 供应链监控:监控供应链各环节状态
- 物流监控:监控物流运输状态和时效
- 财务指标分析:
- 收入分析:按产品、地区、时间分析收入构成
- 成本分析:监控各项成本支出和趋势
- 利润分析:分析利润率和盈利能力
Grafana 通过构建实时销售监控仪表盘,可以实时监控关键业务指标,如订单量、销售额、支付转化率等。
3.2.2 运营数据监控
Grafana 支持对各种运营数据进行实时监控:
- 系统性能指标:
- 吞吐量监控:监控系统处理能力
- 错误率监控:监控失败请求比例
- 响应时间分布:监控响应时间的统计分布
- 业务流程监控:
- 流程进度监控:监控业务流程执行进度
- 流程效率分析:分析各环节耗时和效率
- 异常流程识别:识别异常业务流程
- 服务质量监控:
- SLA 监控:监控服务等级协议达成情况
- 可用性监控:监控服务可用性和停机时间
- 性能基线:建立性能基线并监控偏差
3.2.3 趋势分析与预测
Grafana 在趋势分析和预测方面的应用:
- 时间序列分析:
- 趋势预测:基于历史数据预测未来趋势
- 季节性分析:分析数据的季节性变化
- 异常检测:识别数据中的异常点
- 容量规划:
- 资源使用趋势:监控资源使用趋势并预测未来需求
- 性能瓶颈预测:预测系统性能瓶颈
- 成本预测:预测基础设施成本
- 业务预测:
- 销售预测:基于历史销售数据预测未来销售
- 用户增长预测:预测用户增长趋势
- 需求预测:预测产品或服务需求
3.2.4 多维度数据分析
Grafana 支持多维度数据分析:
- 维度分析:
- 按时间维度:年、季度、月、周、日分析
- 按地域维度:国家、省 / 州、城市分析
- 按产品维度:产品类别、具体产品分析
- 指标下钻:
- 从汇总数据下钻到明细数据
- 从高层次指标下钻到低层次指标
- 从异常指标下钻到具体原因
- 关联分析:
- 指标相关性分析:分析不同指标之间的相关性
- 因果关系分析:分析事件之间的因果关系
- 影响因素分析:分析影响关键指标的因素
3.3 DevOps 与云原生场景
Grafana 在 DevOps 和云原生环境中扮演着关键角色,是现代软件交付流程中不可或缺的一部分。
3.3.1 CI/CD 流水线监控
Grafana 可以监控整个 CI/CD 流程:
- 构建监控:
- 构建状态监控:监控构建成功 / 失败状态
- 构建时间监控:监控构建耗时和趋势
- 构建资源监控:监控构建服务器资源使用
- 测试监控:
- 测试用例执行监控:监控测试用例执行进度和结果
- 测试覆盖率监控:监控代码测试覆盖率
- 测试性能监控:监控测试执行时间和资源使用
- 部署监控:
- 部署状态监控:监控部署进度和状态
- 部署成功率监控:监控部署成功率和失败原因
- 回滚监控:监控部署回滚操作
3.3.2 微服务架构监控
在微服务架构中,Grafana 提供全面的监控能力:
- 服务发现与注册监控:
- 服务注册状态:监控服务在注册中心的注册状态
- 服务健康检查:监控服务健康检查结果
- 服务实例监控:监控每个服务实例的运行状态
- 服务间通信监控:
- 调用链监控:监控服务间调用链路
- 调用性能监控:监控服务间调用的响应时间
- 调用成功率监控:监控服务间调用的成功率
- 分布式追踪:
- 分布式链路追踪:追踪请求在各服务间的流转
- 性能瓶颈定位:通过追踪数据定位性能瓶颈
- 错误根因分析:分析错误发生的根本原因
3.3.3 容器编排监控
Grafana 与 Kubernetes 等容器编排平台深度集成:
- Kubernetes 资源监控:
- Pod 监控:监控 Pod 的创建、运行、销毁过程
- ReplicaSet 监控:监控副本数量和状态
- Service 监控:监控服务的访问状态
- 容器运行时监控:
- Docker 监控:监控 Docker daemon 状态和容器运行情况
- containerd 监控:监控 containerd 运行状态
- CRI 监控:监控容器运行时接口
- 存储监控:
- PersistentVolume 监控:监控持久化卷的使用情况
- StorageClass 监控:监控存储类的配置和使用
- 存储性能监控:监控存储的 I/O 性能
3.3.4 服务网格监控
在服务网格架构中,Grafana 提供以下监控能力:
- Istio 监控:
- 流量管理监控:监控 Istio 的流量路由规则执行情况
- 安全策略监控:监控 Istio 的认证和授权策略
- 遥测数据监控:监控 Istio 收集的遥测数据
- Linkerd 监控:
- 服务配置监控:监控 Linkerd 的服务配置
- 性能指标监控:监控 Linkerd 的数据平面性能
- 控制平面监控:监控 Linkerd 控制平面的运行状态
- 流量分析:
- 流量拓扑:可视化服务间的流量关系
- 流量指标:监控流量的大小、方向、来源
- 流量策略效果:监控流量管理策略的执行效果