统一观测丨使用 Prometheus 监控 E-MapReduce,我们该关注哪些指标? - 阿里巴巴中间...
source link: https://www.cnblogs.com/aliware/p/17209970.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
作者:闻洪
开源大数据平台E-MapReduce(简称“EMR”)是云原生开源大数据平台,向客户提供简单易集成的Hadoop、Hive、Spark、Flink、Presto、ClickHouse、StarRocks、Delta、Hudi等开源大数据计算和存储引擎。本文旨在分享阿里云Prometheus对EMR平台大数据服务的监控实践。
EMR 简介
开源大数据开发平台E-MapReduce(简称“EMR”)作为大数据处理的系统解决方案被越来越多的企业所接受。而阿里云EMR构建于云服务器ECS上,基于开源的Apache Hadoop和Apache Spark可以方便地使用Hadoop和Spark生态系统中的其他周边系统分析和处理数据,还可以与阿里云OSS和RDS等云数据存储系统和数据库系统进行数据传输,让企业可以快速搭建Hadoop、Spark、Flink、Kafka和HBase等开源大数据服务。
我们可以看到,E-MapReduce的核心是集群。E-MapReduce集群是由一个或多个ECS实例组成的Hadoop、Flink、Druid、ZooKeeper集群。以Hadoop为例,每个ECS 实例上通常都运行了一些daemon进程(例如,NameNode、DataNode、ResouceManager和NodeManager),这些daemon进程共同组成了Hadoop集群。在众多大数据组件背后,是海量需要被观测的指标,这就给运维工程师、SRE工程师带来了巨大的挑战。那么,构建E-MapReduce之后,我们针对不同组件,应该关注哪些指标呢?
E-MapReduce 观测指标解读
Metric指标采集
E-MapReduce指标观测主要包括HOST监控、HDFS 、YARN、Hive、Kafka、Zookeeper、ClickHouse和Flink等,那么接下来我们将进行逐一解读。
HOST指标[1]
提供ECS节点CPU、内存、磁盘、load、网络、socket等监控指标。
HDFS指标[2]
HDFS(Hadoop Distributed File System)是一种Hadoop分布式文件系统,适用于大规模数据的分布式读写,特别是读多写少的场景。HDFS指标包括HOME、NameNodes、DataNodes和JournanlNodes指标。
- HDFS-HOME
- HDFS-NameNodes
- HDFS-DataNodes
- HDFS-JournanlNodes
YARN指标[3]
YARN是Hadoop系统的核心组件,主要功能包括负责Hadoop集群的资源管理,对作业进行调度运行以及监控。YARN指标包括HOME、Queue、ResourceManager、NodeManager、TimeLineServer和JobHistory。
- YARN-HOME
- YARN-Queues
- YARN-ResourceManager
- YARN-NodeManagers
- YARN-TimeLineServer
- YARN-JobHistory
Hive指标[4]
Hive是一个基于Hadoop的数据仓库框架,在大数据业务场景中,主要用来进行数据提取、转化和加载(ETL)以及元数据管理。Hive由HiveServer2(HiveQL查询服务器)、Hive MetaStore(元数据管理模块)和Hive Client构成,其指标包括HiveMetaStore和HiveServer2。
- HiveMetaStore
指标 | 描述 |
---|---|
hive_memory_heap_max | JVM最大可用堆内存,单位:Byte。 |
hive_memory_heap_used | JVM已使用堆内存,单位:Byte。 |
hive_memory_non_heap_used | JVM已使用堆外内存量,单位:Byte。 |
hive_active_calls_api_alter_table | 当前活跃的alter table请求数。 |
hive_active_calls_api_create_table | 当前活跃的create table请求数。 |
hive_active_calls_api_drop_table | 当前活跃的drop table请求数。 |
hive_api_alter_table | alter table请求平均时间,单位:ms。 |
hive_api_alter_table_with_environment_context | alter table with env context请求平均时间,单位:ms。 |
hive_api_create_table | create table请求平均时间,单位:ms。 |
hive_api_create_table_with_environment_context | create table with env context请求平均时间,单位:ms。 |
api_drop_table | drop table请求平均时间,单位:ms。 |
hive_api_drop_table_with_environment_context | drop table with env context请求平均时间,单位:ms。 |
hive_api_get_all_databases | get all databases请求平均时间,单位:ms。 |
hive_api_get_all_functions | get all functions请求平均时间,单位:ms。 |
hive_api_get_database | get database请求平均时间,单位:ms。 |
hive_api_get_databases | get databases请求平均时间,单位:ms。 |
hive_api_get_multi_table | get multi table请求平均时间,单位:ms。 |
hive_api_get_tables_by_type | get table请求平均时间,单位:ms。 |
hive_api_get_table_objects_by_name_req | get table objects by name请求平均时间,单位:ms。 |
hive_api_get_table_req | get table req请求平均时间,单位:ms。 |
hive_api_get_table_statistics_req | get table statistics请求平均时间,单位:ms。 |
hive_api_get_tables | get tables请求平均时间,单位:ms。 |
hive_api_get_tables_by_type | get tables by type请求平均时间,单位:ms。 |
- HiveServer2
指标 | 描述 |
---|---|
hive_metrics_hs2_active_sessions | 当前活跃的session个数。 |
hive_metrics_memory_total_init | JVM初始化总内存,单位:Byte。 |
hive_metrics_memory_total_committed | JVM已预留总内存,单位:Byte。 |
hive_metrics_memory_total_max | JVM最大可用总内存,单位:Byte。 |
hive_metrics_memory_heap_committed | JVM已预留堆内存,单位:Byte。 |
hive_metrics_memory_heap_inithive_metrics_memory_heap_committed | JVM初始化堆内存,单位:Byte。 |
hive_metrics_memory_non_heap_committed | JVM已预留堆外内存,单位:Byte。 |
hive_metrics_memory_non_heap_init | JVM初始化堆外内存,单位:Byte。 |
hive_metrics_memory_non_heap_max | JVM最大可用堆外内存,单位:Byte。 |
hive_metrics_gc_PS_MarkSweep_count | JVM PS MarkSweep GC次数。 |
hive_metrics_gc_PS_MarkSweep_time | JVM PS MarkSweep GC时间,单位:ms。 |
hive_metrics_gc_PS_Scavenge_time | JVM PS Scavenge GC时间,单位:ms。 |
hive_metrics_threads_daemon_count | JVM daemon线程数。 |
hive_metrics_threads_count | JVM线程数。 |
hive_metrics_threads_blocked_count | JVM blocked线程数。 |
hive_metrics_threads_deadlock_count | JVM deadlock线程数。 |
hive_metrics_threads_new_count | JVM new状态线程数。 |
hive_metrics_threads_runnable_count | JVM runnable线程数。 |
hive_metrics_threads_terminated_count | JVM terminated线程数。 |
hive_metrics_threads_waiting_count | JVM waiting线程数。 |
hive_metrics_threads_timed_waiting_count | JVM timed_waiting线程数。 |
hive_metrics_memory_heap_max | JVM最大可用堆内存,单位:Byte。 |
hive_metrics_memory_heap_used | JVM已使用堆内存,单位:Byte。 |
hive_metrics_memory_non_heap_used | JVM已使用堆外内存量,单位:Byte。 |
hive_metrics_hs2_open_sessions | 当前打开的session数。 |
hive_metrics_hive_mapred_tasks | 提交的Hive on MR作业总数。 |
hive_metrics_hive_tez_tasks | 提交的Hive on Tez作业总数。 |
hive_metrics_cumulative_connection_count | 累计连接数。 |
hive_metrics_active_calls_api_runTasks | 当前runtask请求数。 |
hive_metrics_hs2_completed_sql_operation_FINISHED | 已结束的SQL总数。 |
hive_metrics_hs2_sql_operation_active_user | 当前活跃用户数。 |
hive_metrics_open_connections | 当前打开的连接数。 |
hive_metrics_api_PostHook_com_aliyun_emr_meta_hive_hook_LineageLoggerHook | 执行LineageLoggerHook的平均时间,单位:ms。 |
hive_metrics_api_hs2_sql_operation_PENDING | SQL任务处于PEEDING状态的平均时间,单位:ms。 |
hive_metrics_api_hs2_sql_operation_RUNNING | 运SQL任务处于RUNNING状态的平均时间,单位:ms。 |
hive_metrics_hs2_submitted_queries | 提交查询的平均时间,单位:ms。 |
hive_metrics_hs2_executing_queries | 执行查询的平均时间,单位:ms。 |
hive_metrics_hs2_succeeded_queries | 服务启动后成功的查询数。 |
hive_metrics_hs2_failed_queries | 服务启动后失败的查询数。 |
ZooKeeper指标[5]
ZooKeeper是一个分布式、高可用性的协调服务。ZooKeeper提供分布式配置服务、同步服务和命名注册等功能。
指标 | 描述 |
---|---|
zk_packets_received | ZooKeeper接收的包的数量。 |
zk_packets_sent | ZooKeeper发送的包的数量。 |
zk_avg_latency | ZooKeeper平均请求延迟,单位:ms。 |
zk_min_latency | ZooKeeper最小请求延迟,单位:ms。 |
zk_max_latency | ZooKeeper最大请求延迟,单位:ms。 |
zk_watch_count | ZooKeeper watch的数量。 |
zk_znode_count | ZooKeeper znode的数量。 |
zk_num_alive_connections | ZooKeeper存活的连接数。 |
zk_outstanding_requests | ZooKeeper排队请求的数量。当ZooKeeper超过了它的处理能力时,该值会增大。 |
zk_approximate_data_size | ZooKeeper的数据大小(近似值),单位:Byte。 |
zk_open_file_descriptor_count | ZooKeeper打开文件的数量。 |
zk_max_file_descriptor_count | ZooKeeper最大允许打开的文件数量。 |
zk_node_status | ZooKeeper节点状态:- -1:节点不可用。 |
- 0:作为follower节点。
- 1:作为leader节点。 |
| zk_synced_followers | 同步的ZooKeeper服务数量。 |
Kafka指标[6]
消息队列Kafka版是阿里云提供的分布式、高吞吐、可扩展的消息队列服务。消息队列Kafka版广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等大数据领域,已成为大数据生态中不可或缺的部分。
- Kafka-HOME
- Kafka-Broker
-
- Status
- Throughput
- Performance
- Storage
- Request Rate
- Request Time
- MessageConversion
- ZK session
- Kafka-Topic
-
- Status
- Throughput
- Request Rate
- MessageConversion
- Storage
Impala指标[7]
Impala为存储在Apache Hadoop中的数据提供了高性能和低延迟的SQL查询。
指标 | 描述 |
---|---|
impala_impala_server_resultset_cache_total_bytes | 结果集缓存大小,单位:Byte。 |
impala_num_executing_queries | 当前正在执行的查询数量。 |
impala_num_waiting_queries | 当前正在等待的查询数量。 |
impala_impala_server_query_durations_ms_95th | 95%的查询耗时时间,单位:ms。 |
impala_num_in_flight_queries | 集群正在in fight状态的查询数量。 |
impala_impala_server_query_durations_ms_75th | 75%的查询耗时时间,单位:ms。 |
impala_impala_thrift_server_CatalogService_svc_thread_wait_time_99_9th | Catalog Service的客户端对服务线程的等待时间,单位:ms。 |
impala_impala_thrift_server_CatalogService_connection_setup_time_99_9th | 99%的Catalog Service客户端等待建立连接所花费的时间,单位:ms。 |
impala_impala_server_query_durations_ms_99_9th | 99%的查询耗时时间,单位:ms。 |
impala_impala_server_ddl_durations_ms_99_9th | 99%的DDL操作耗时时间,单位:ms。 |
impala_impala_server_query_durations_ms_90th | 90%的查询耗时时间,单位:ms。 |
impala_impala_server_ddl_durations_ms_90th | 90%的DDL操作耗时时间,单位:ms。 |
impala_impala_server_query_durations_ms_50th | 50%的查询耗时时间,单位:ms。 |
impala_impala_server_ddl_durations_ms_50th | 50%的DDL操作耗时时间,单位:ms。 |
impala_impala_server_ddl_durations_ms_95th | 95%的DDL操作耗时时间,单位:ms。 |
impala_impala_server_scan_ranges_num_missing_volume_id | 在进程生命周期内缺失volume id的scan range总数。 |
impala_impala_server_ddl_durations_ms_75th | 75%的DDL操作耗时时间,单位:ms。 |
impala_impala_server_num_queries_spilled | 任何运算符溢出的查询数。 |
impala_impala_server_scan_ranges_total | 在进程生命周期内读取的扫描范围总数。 |
impala_impala_server_num_queries_expired | 由于不活动而过期的查询数。 |
impala_impala_server_resultset_cache_total_num_rows | 结果集缓存记录数。 |
impala_impala_server_num_open_hiveserver2_sessions | 打开的HiveServer2会话数。 |
impala_impala_server_num_sessions_expired | 由于不活动而过期的会话数。 |
impala_impala_server_num_fragments_in_flight | 当前正在执行的查询片段实例的数量。 |
impala_impala_server_num_queries_registered | 在此Impala服务器实例上注册的查询总数。包括正在进行中并等待关闭的查询。 |
impala_impala_server_num_files_open_for_insert | 当前为写入而打开的HDFS文件数。 |
impala_impala_server_num_queries | 在进程生命周期内处理的查询总数。 |
impala_impala_server_hedged_read_ops | 在进程生命周期内尝试的hedged reads总数。 |
impala_impala_server_num_open_beeswax_sessions | 打开Beeswax会话的数量。 |
impala_impala_server_backend_num_queries_executed | 在进程的生命周期内在此后端执行的查询总数。 |
impala_impala_server_num_fragments | 在进程生命周期内处理的查询片段总数。 |
impala_rpc_impala_ControlService_rpcs_queue_overflow | ControlService由于服务队列溢出而被拒绝的传入RPC总数。 |
impala_impala_server_hedged_read_ops_win | Hedged read比常规读取操作快的总次数。 |
impala_mem_tracker_DataStreamService_current_usage_bytes | Memtracker DataStreamService当前使用的字节数。 |
impala_impala_server_backend_num_queries_executing | 当前在此后端上执行的查询数。 |
impala_cluster_membership_executor_groups_total_healthy | 处于健康状态的执行器组总数。 |
impala_rpc_impala_DataStreamService_rpcs_queue_overflow | DataStreamService由于服务队列溢出而被拒绝的传入RPC总数。 |
impala_cluster_membership_backends_total | 向statestore注册的后端总数。 |
impala_mem_tracker_DataStreamService_peak_usage_bytes | Memtracker DataStreamService峰值使用的字节数。 |
impala_total_senders_blocked_on_recvr_creation | 已被阻止等待接收片段初始化的发件人总数。 |
impala_mem_tracker_ControlService_peak_usage_bytes | Memtracker ControlService峰值使用字节数。 |
impala_simple_scheduler_local_assignments_total | 本地作业数。 |
impala_mem_tracker_ControlService_current_usage_bytes | Memtracker ControlService当前使用字节数。 |
impala_memory_total_used | 已使用内存,单位:Byte。 |
impala_cluster_membership_executor_groups_total | 至少有一个执行程序的执行程序组总数。 |
impala_memory_rss | RSS的内存大小,包括TCMalloc、缓冲池和JVM,单位:Byte。 |
impala_total_senders_timedout_waiting_for_recvr_creation | 超时等待接收片段初始化的发送者总数。 |
impala_senders_blocked_on_recvr_creation | 等待接收片段初始化的发送者数量。 |
impala_simple_scheduler_assignments_total | 作业数。 |
impala_memory_mapped_bytes | 进程中内存映射的总字节数(虚拟内存大小),单位:Byte。 |
HUE指标[8]
指标 | 描述 |
---|---|
hue_requests_response_time_avg | 请求响应时间平均值。 |
hue_requests_response_time_95_percentile | 95%的请求响应时间。 |
hue_requests_response_time_std_dev | 请求响应时间标准差。 |
hue_requests_response_time_median | 50%的请求响应时间。 |
hue_requests_response_time_75_percentile | 75%的请求响应时间。 |
hue_requests_response_time_count | 请求响应时间计数。 |
hue_requests_response_time_5m_rate | 最近5分钟的请求响应速率。 |
hue_requests_response_time_min | 请求响应时间最小值。 |
hue_requests_response_time_sum | 请求响应时间总和。 |
hue_requests_response_time_max | 请求响应时间的最大值。 |
hue_requests_response_time_mean_rate | 请求响应速率平均值。 |
hue_requests_response_time_99_percentile | 99%的最近一小时请求响应时间。 |
hue_requests_response_time_15m_rate | 最近15分钟请求响应速率。 |
hue_requests_response_time_999_percentile | 99.9%的请求响应时间。 |
hue_requests_response_time_1m_rate | 最近1分钟的请求响应速率。 |
hue_users_active_total | 活跃用户总数。 |
hue_users_active | 最近1小时的活跃用户数。 |
hue_users | 用户总数。 |
hue_threads_total | 当前线程总数。 |
hue_threads_daemon | 常驻线程数量。 |
hue_queries_number | 查询数量总和。 |
hue_requests_exceptions | 当前异常请求数。 |
hue_requests_active | 当前活跃请求数。 |
Kudu指标[9]
参数 | 指标 | 描述 |
---|---|---|
op_apply_queue_length(99) | kudu_op_apply_queue_length_percentile_99 | 99%的操作队列的长度。 |
op_apply_queue_length(75) | kudu_op_apply_queue_length_percentile_75 | 75%的操作队列的长度。 |
op_apply_queue_length(mean) | kudu_op_apply_queue_length_mean | 操作队列的长度的平均值。 |
rpc_incoming_queue_time(99) | kudu_rpc_incoming_queue_time_percentile_99 | 99%的RPC队列的等待时间,单位:μs。 |
rpc_incoming_queue_time(75) | kudu_rpc_incoming_queue_time_percentile_75 | 75%的RPC队列的等待时间,单位:μs。 |
rpc_incoming_queue_time(mean) | kudu_rpc_incoming_queue_time_mean | RPC队列的等待时间的平均值,单位:μs。 |
reactor_load_percent(99) | kudu_reactor_load_percent_percentile_99 | 99%的Reactor线程的负载。 |
reactor_load_percent(75) | kudu_reactor_load_percent_percentile_75 | 75%的Reactor线程的负载。 |
reactor_load_percent(mean) | kudu_reactor_load_percent_mean | Reactor线程的负载的平均值。 |
op_apply_run_time(99) | kudu_op_apply_run_time_percentile_99 | 99%的操作执行时间,单位:μs。 |
op_apply_run_time(75) | kudu_op_apply_run_time_percentile_75 | 75%的操作执行时间,单位:μs。 |
op_apply_run_time(mean) | kudu_op_apply_run_time_mean | 操作执行时间的平均值,单位:μs。 |
op_prepare_run_time(99) | kudu_op_prepare_run_time_percentile_99 | 99%的操作准备时间,单位:μs。 |
op_prepare_run_time(75) | kudu_op_prepare_run_time_percentile_75 | 75%的操作准备时间,单位:μs。 |
op_prepare_run_time(mean) | kudu_op_prepare_run_time_mean | 操作准备时间的平均值,单位:μs。 |
flush_mrs_duration(99) | kudu_flush_mrs_duration_percentile_99 | 99%的MemRowSet flush时间,单位:ms。 |
flush_mrs_duration(75) | kudu_flush_mrs_duration_percentile_75 | 75%的MemRowSet flush时间,单位:ms。 |
flush_mrs_duration(mean) | kudu_flush_mrs_duration_mean | MemRowSet flush时间的平均值,单位:ms。 |
log_append_latency(99) | kudu_log_append_latency_percentile_99 | 99%的日志的append时间,单位:μs。 |
log_append_latency(75) | kudu_log_append_latency_percentile_75 | 75%的日志的append时间,单位:μs。 |
log_append_latency(mean) | kudu_log_append_latency_mean | 日志的append时间的平均值,单位:μs。 |
flush_dms_duration(99) | kudu_flush_dms_duration_percentile_99 | 99%的DeltaMemStore flush时间,单位:ms。 |
flush_dms_duration(75) | kudu_flush_dms_duration_percentile_75 | 75%的DeltaMemStore flush时间,单位:ms。 |
flush_dms_duration(mean) | kudu_flush_dms_duration_mean | DeltaMemStore flush时间的平均值,单位:ms。 |
op_prepare_queue_length(99) | kudu_op_prepare_queue_length_percentile_99 | 99%的准备队列的长度。 |
op_prepare_queue_length(75) | kudu_op_prepare_queue_length_percentile_75 | 75%的准备队列的长度。 |
op_prepare_queue_length(mean) | kudu_op_prepare_queue_length_mean | 准备队列的长度的平均值。 |
log_gc_duration(99) | kudu_log_gc_duration_percentile_99 | 99%的日志GC的时间,单位:ms。 |
log_gc_duration(75) | kudu_log_gc_duration_percentile_75 | 75%的日志GC的时间,单位:ms。 |
log_gc_duration(mean) | kudu_log_gc_duration_mean | 日志GC的时间的平均值,单位:ms。 |
log_sync_latency(99) | kudu_log_sync_latency_percentile_99 | 99%的日志Sync的时间,单位:μs。 |
log_sync_latency(75) | kudu_log_sync_latency_percentile_75 | 75%的日志Sync的时间,单位:μs。 |
log_sync_latency(mean) | kudu_log_sync_latency_mean | 日志Sync的时间的平均值,单位:μs。 |
prepare_queue_time(99) | kudu_op_prepare_queue_time_percentile_99 | 99%的操作在准备队列的等待时间,单位:μs。 |
prepare_queue_time(75) | kudu_op_prepare_queue_time_percentile_75 | 75%的操作在准备队列的等待时间,单位:μs。 |
prepare_queue_time(mean) | kudu_op_prepare_queue_time_mean | 操作在准备队列的等待时间的平均值,单位:μs。 |
rpc_connections_accepted | kudu_rpc_connections_accepted | RPC请求接收的数量。 |
block_cache_usage | kudu_block_cache_usage | Tserver Block缓存的使用量,单位:Byte。 |
active_scanners | kudu_active_scanners | 处于Active状态的Scanner数量。 |
data_dirs_full | kudu_data_dirs_full | Full状态的数据目录个数。 |
rpcs_queue_overflow | kudu_rpcs_queue_overflow | RPC队列溢出次数。 |
cluster_replica_skew | kudu_cluster_replica_skew | 服务器上承载的最多的tablet数量与最少的tablet数量的差值。 |
log_gc_running | kudu_log_gc_running | 正在GC的日志数量。 |
data_dirs_failed | kudu_data_dirs_failed | 失效的数据目录个数。 |
leader_memory_pressure_rejections | kudu_leader_memory_pressure_rejections | 内存压力拒绝的请求个数。 |
transaction_memory_pressure_rejections | kudu_transaction_memory_pressure_rejections | 内存压力拒绝的事务个数。 |
ClickHouse指标[10]
EMR ClickHouse完全兼容开源版本的产品特性,并且在开源的基础上优化了读写性能,提升了ClickHouse与EMR其他组件快速集成的能力。
指标 | 描述 |
---|---|
clickhouse_server_events_ReplicatedPartFailedFetches | 数据无法从Replicated*MergeTree表中任一副本获取的次数。 |
clickhouse_server_events_ReplicatedPartChecksFailed | Replicated*MergeTree表中数据检查失败的次数。 |
clickhouse_server_events_ReplicatedDataLoss | Replicated*MergeTree表中数据不在任何一个副本中的次数。 |
clickhouse_server_events_ReplicatedMetaDataChecksFailed | Replicated*MergeTree表检查元数据失败的次数。 |
clickhouse_server_events_ReplicatedMetaDataLoss | Replicated*MergeTree表中元数据丢失的次数。 |
clickhouse_server_events_DuplicatedInsertedBlocks | 写入Replicated*MergeTree表中的Block重复的次数。 |
clickhouse_server_events_ZooKeeperUserExceptions | Zookeeper中与ClickHouse状态相关错误出现的次数。 |
clickhouse_server_events_ZooKeeperHardwareExceptions | ZooKeeper网络或类似的错误出现的次数。 |
clickhouse_server_events_ZooKeeperOtherExceptions | ZooKeeper中非硬件或状态错误出现的次数。 |
clickhouse_server_events_DistributedConnectionFailTry | 分布式连接重试出错的次数。 |
clickhouse_server_events_DistributedConnectionMissingTable | 分布式连接无法找到表的次数。 |
clickhouse_server_events_DistributedConnectionStaleReplica | 分布式连接得到的副本不新鲜的次数。 |
clickhouse_server_events_DistributedConnectionFailAtAll | 在所有次重试结束后分布式连接失败的次数。 |
clickhouse_server_events_SlowRead | Slow Read的次数。 |
clickhouse_server_events_ReadBackoff | 由于Slow Read导致的线程减少的次数。 |
clickhouse_server_metrics_BackgroundPoolTask | background_pool中的任务个数。 |
clickhouse_server_metrics_BackgroundMovePoolTask | background_move_pool中的任务个数。 |
clickhouse_server_metrics_BackgroundSchedulePoolTask | schedule_pool中的任务个数。 |
clickhouse_server_metrics_BackgroundBufferFlushSchedulePoolTask | buffer_flush_schedule_pool中的任务个数。 |
clickhouse_server_metrics_BackgroundDistributedSchedulePoolTask | distributed_schedule_pool中的任务个数。 |
clickhouse_server_metrics_BackgroundTrivialSchedulePoolTask | trivial_schedule_pool中的任务个数。 |
clickhouse_server_metrics_TCPConnection | TCP连接个数。 |
clickhouse_server_metrics_HTTPConnection | HTTP连接个数。 |
clickhouse_server_metrics_InterserverConnection | 用于从其他副本上获取数据的连接个数。 |
clickhouse_server_metrics_MemoryTracking | Server使用的总内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingInBackgroundProcessingPool | background_pool中任务执行所使用的内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingInBackgroundMoveProcessingPool | background_move_pool中任务执行所使用的内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingInBackgroundBufferFlushSchedulePool | buffer_flush_schedule_pool中任务执行所使用的内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingInBackgroundSchedulePool | schedule_pool中任务执行所使用的内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingInBackgroundDistributedSchedulePool | distributed_schedule_pool中任务执行所使用的内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingInBackgroundTrivialSchedulePool | trivial_schedule_pool中任务执行所使用的内存,单位:Byte。 |
clickhouse_server_metrics_MemoryTrackingForMerges | 后台执行Merge时使用的内存,单位:Byte。 |
Flink指标[11]
Flink是一个流式数据流执行引擎,其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。
- Overview
参数 | 指标 | 描述 |
---|---|---|
Num Of RunningJobs | numRunningJobs | JM中正在运行的作业数。 |
Job Uptime | job_uptime | 作业已运行时间,单位:ms。仅支持返回单个系列或表的查询。 |
TaskSlots Available | taskSlotsAvailable | 当前可用的TaskSlots数量。 |
TaskSlots Total | taskSlotsTotal | TaskSlots的总数量。 |
Num of TM | numRegisteredTaskManagers | 已注册的TM数量。 |
sourceIdleTime | sourceIdleTime | 源没有处理任何记录的时间,单位:ms。 |
currentFetchEventTimeLag | currentFetchEventTimeLag | 业务延时(fetch=数据发生时间与数据进入Flink Source时间之间的差值)。 |
currentEmitEventTimeLag | currentEmitEventTimeLag | 业务延时(emit=数据发生时间与数据离开Flink Source时间之间的差值)。 |
- Checkpoint
参数 | 指标 | 描述 |
---|---|---|
Num of Checkpoints | totalNumberOfCheckpoints | 检查点总数。 |
numberOfFailedCheckpoints | 失败的检查点数量。 | |
numberOfCompletedCheckpoints | 已完成的检查点数量。 | |
numberOfInProgressCheckpoints | 正在进行的检查点数量。 | |
lastCheckpointDuration | lastCheckpointDuration | 最近一个检查点完成时间,单位:ms。 |
lastCheckpointSize | lastCheckpointSize | 最近一个检查点的大小,单位:Byte。 |
lastCheckpointRestoreTimestamp | lastCheckpointRestoreTimestamp | 协调器上最近一个检查点的恢复时间,单位:ms。 |
- Network
参数 | 指标 | 描述 |
---|---|---|
InPool Usage | inPoolUsage | 输入缓冲区使用量。 |
OutPool Usage | outPoolUsage | 输出缓冲区使用量。 |
OutputQueue Length | outputQueueLength | 输出缓冲区排队数量。 |
InputQueue Length | inputQueueLength | 输入缓冲区排队数量。 |
参数 | 指标 | 描述 |
---|---|---|
numBytesIn PerSecond | numBytesInLocalPerSecond | 每秒本地读取数据的字节数。 |
numBytesInRemotePerSecond | 每秒远端读取数据的字节数。 | |
numBuffersInLocalPerSecond | 每秒本地读取网络缓冲区的数量。 | |
numBuffersInRemotePerSecond | 每秒远端读取网络缓冲区的数量。 | |
numBytesOut PerSecond | numBytesOutPerSecond | 每秒发出字节数。 |
numBuffersOutPerSecond | 每秒发出网络缓冲区的数量。 | |
Task numRecords I/O PerSecond | numRecordsInPerSecond | 每秒接收的记录数。 |
numRecordsOutPerSecond | 每秒发出的记录数。 | |
Task numRecords I/O | numRecordsIn | 接收的记录数。 |
numRecordsOut | 发出的记录数。 | |
Operator CurrentSendTime | currentSendTime | 发送最新一条记录的耗时时间,单位:ms。 |
- Watermark
参数 | 指标 | 描述 |
---|---|---|
Task InputWatermark | currentInputWatermark | 任务收到最后一个水印的时间,单位:ms。 |
Operator In/Out Watermark | currentInputWatermark | 算子收到最后一个水印的时间,单位:ms。 |
currentOutputWatermark | 算子发出最后一个水印的时间,单位:ms。 | |
watermarkLag | watermarkLag | Watermark滞后时间,单位:ms。 |
参数 | 指标 | 描述 |
---|---|---|
JM CPU Load | CPU_Load | JM CPU使用率。 |
TM CPU Load | CPU_Load | TM CPU使用率。 |
CPU Usage | CPU_Usage | TM CPU使用率(基于ProcessTree)。 |
- Memory
参数 | 指标 | 描述 |
---|---|---|
JM Heap Memory | Memory_Heap_Used | JM Heap Memory已使用量,单位:Byte。 |
Memory_Heap_Committed | JM Heap Memory已申请量,单位:Byte。 | |
Memory_Heap_Max | JM Heap Memory最大可用量,单位:Byte。 | |
JM NonHeap Memory | Memory_NonHeap_Used | JM NonHeap Memory已使用量,单位:Byte。 |
Memory_NonHeap_Committed | JM NonHeap Memory已申请量,单位:Byte。 | |
Memory_NonHeap_Max | JM NonHeap Memory最大可用量,单位:Byte。 | |
TM Heap Memory | Memory_Heap_Used | TM Heap Memory已使用量,单位:Byte。 |
Memory_Heap_Committed | TM Heap Memory已申请量,单位:Byte。 | |
Memory_Heap_Max | TM Heap Memory最大可用量,单位:Byte。 | |
TM NonHeap Memory | Memory_NonHeap_Used | TM NonHeap Memory已使用量,单位:Byte。 |
Memory_NonHeap_Committed | TM NonHeap Memory已申请量,单位:Byte。 | |
Memory_NonHeap_Max | TM NonHeap Memory最大可用量,单位:Byte。 | |
Memory RSS | Memory_RSS | TM当前已使用的堆内存量,单位:Byte。 |
参数 | 指标 | 描述 |
---|---|---|
JM Threads | Threads_Count | JM活跃线程总数。 |
TM Threads | Threads_Count | TM活跃线程总数。 |
JM GC Time | GarbageCollector_PS_Scavenge_Time | JM年轻代垃圾回收器运行时间。 |
GarbageCollector_PS_MarkSweep_Time | JM老年代“标记-清除”垃圾回收器的运行时间。 | |
JM GC Count | GarbageCollector_PS_Scavenge_Count | JM年轻代垃圾回收器运行次数。 |
GarbageCollector_PS_MarkSweep_Count | JM老年代“标记-清除”垃圾回收器的运行次数。 | |
TM GC Count | GarbageCollector_PS_Scavenge_Count | TM年轻代垃圾回收器运行次数。 |
GarbageCollector_PS_MarkSweep_Count | TM老年代“标记-清除”垃圾回收器的运行次数。 | |
TM GC Time | GarbageCollector_PS_Scavenge_Time | TM年轻代垃圾回收器运行时间。 |
GarbageCollector_PS_MarkSweep_Time | TM老年代“标记-清除”垃圾回收器的运行时间。 | |
TM ClassLoader | ClassLoader_ClassesLoaded | TM自JVM启动以来已加载的类总数。 |
ClassLoader_ClassesUnloaded | TM自JVM启动以来已卸载的类总数。 | |
JM ClassLoader | ClassLoader_ClassesLoaded | JM自JVM启动以来已加载的类总数。 |
ClassLoader_ClassesUnloaded | JM自JVM启动以来已卸载的类总数。 |
使用阿里云 Prometheus 监控 EMR
下面介绍如何使用阿里云Prometheus进行EMR的监控,包括接入配置、查看监控大盘和配置告警规则等三方面。
接入EMR配置
开启exporter端口
创建完EMR集群后会默认在ECS上安装taihao-exporter,但prometheus端口未打开,需要手动开启。
- 先进入**EMR控制台 [ 12] **找到EMR集群id和集群名称
- 点击“集群名称”找到master和core节点,并远程登录ECS
- 查找exporter进程,ps -ef | grep taihao_exporter,修改taihao_exporter.yaml配置prom_sink_enable=true并重启服务(记得修改所有节点配置)
sed -i 's/prom_sink_enable:\s*false/prom_sink_enable: true/g' /usr/local/taihao_exporter/taihao_exporter.yamlservice taihao_exporter restart
接入EMR组件
登录**阿里云Prometheus [ 13] **控制台,点击“接入中心”选择“组件应用E-MapReduce”点击“安装”按钮
选择“阿里云ECS环境”和Prometheus实例并填写接入配置信息:
- EMR集群ID:到EMR控制台查找
- EMR集群名称:建议和EMR集群名称一致
- exporter名称:job名称(建议默认值+集群名称)
- exporter端口:默认9712
- 采集路径:Prometheus采集exporter的HTTP Path,使用默认值/metrics_preget
- 采集间隔(秒):采集时间间隔
- ECS标签Key:部署Exporter的ECS标签和标签值,Prometheus通过该标签进行服务发现,具体配置根据上图ECS标签设置,key取值: acs:emr:nodeGroupType或acs:emr:hostGroupType
- ECS标签值:参考ECS标签值,默认是CORE,MASTER (多个值用逗号分割)
- context deadline exceeded,将EMR实例的ECS加入vpc安全组,安装时有安全组提示
查看监控大盘
阿里云Prometheus提供HOST、HDFS、Hive、YARN、Impala、ZooKeeper、Spark、Flink、ClickHouse等共24个大盘,其中包括:
-
HOST大盘:ECS节点CPU、内存、磁盘、load、network、socket等
-
HDFS大盘:HDFS-HOME、HDFS-NameNodes、HDFS-DataNodes、HDFS-JournanlNodes
-
Hive大盘:
- HiveServer2: HiveQL查询服务器, 接收来自JDBC客户端提交的SQL请求
- HiveMetaStore: 元数据管理模块,用于存储Database和Table等元信息
- YARN大盘:
- HOME: 集群状态、内存、任务、节点、container等
- NodeManager: 负责节点的资源管理、监控和作业运行。
- ResourceManager: 负责集群的资源管理与调度,为运行在YARN上的各种类型作业分配资源
- TimeLineServer: 收集作业的指标,并展示作业执行情况
- JobHistory:
-
ClickHouse大盘
-
Flink大盘
-
Impala大盘
-
ZooKeeper大盘
-
Spark大盘进入集成EMR的prometheus实例,点击“E-MapReduce”标签,在弹出界面选择“大盘”tab页,点击大盘缩略图,即可查看对应Grafana大盘。
HOST大盘
HDFS大盘
HDFS-HOME
HDFS-NameNodes
HDFS-DataNodes
HDFS-JournanlNodes
Hive大盘
HiveMetaStore
HiveServer2
YARN大盘
- YARN-HOME-copy
- YARN-HOME2
NodeManagers
JobHistory
ResourceManager
TimeLineServer
Kafka大盘
KAFKA-HOME
KAFKA-Broker
KAFKA-Topic
Impala大盘
Spark大盘
ZooKeeper大盘
ClickHouse大盘
自建 Prometheus 与阿里云 Prometheus 监控的优劣对比
Prometheus作为目前最主流的可观测开源项目之一,已经被众多企业所广泛应用。但在实际生产过程中,还是遇到各种各样问题,其中包括:
- 由于安全、组织管理等因素,用户业务通常部署在多个相互隔离的 VPC,需要在多个 VPC 内都重复、独立部署 Prometheus,导致部署和运维成本高。
- 每套完整的自建观测系统都需要安装并配置 Prometheus、Grafana、AlertManager 等组件,部署过程复杂、实施周期长,并且每次升级都需要对每个组件进行维护。
- 随着监控规模不断扩大,资源消耗呈非线性快速增加,系统可用性无法得到保障。
- 对于EMR的相关组件,自建 Prometheus 无法实现一站式、全局视角的监控建设。
- 开源分享的相关大盘不够专业,却少开箱即用的丰富指标,不能帮助用户更迅速的了解EMR的整体运行状况
针对以上问题,阿里云Proemtheus监控进行了以下几个方面的优化:
一、性能强化&降低资源消耗,压降IT运维成本
为了进一步进行性能优化,阿里云Prometheus监控将Agent 部署在用户侧,保留原生采集能力同时, 尽量使用最少资源;通过采集存储分离架构,提高整体性能;采集组件优化,提升单副本采集能力,降低资源消耗;通过多副本横向扩展均衡分解采集任务,实现动态扩缩,解决开源水平扩展问题。采集/数据处理/存储组件支持多副版本,保证核心数据链路高可用;基于集群规模可直接进行弹性扩容;支持数据重传,彻底解决丢弃逻辑弊病,确保数据完整性与准确性。
同时,为了应对大规模数据、长时间区间的查询场景,通过DAG执行优化、算子下推,提升大规模数据查询性能并支持长时间区间秒级查询;通过Global DataSource和Global View实现对多集群统一监控与跨集群聚合查询。
在提供企业级能力强化同时,全方位降低企业使用Prometheus的IT运维成本。通过包年包月、按量付费等多种计费方式让费用支出与规划更加清晰与灵活,相较于开源版本节省37%以上。
二、与各类数据云服务深度集成
云产品在各自控制台都提供自身产品的可观测性,但这些云产品的指标及看板散落在各控制台,且无法进行精细化的指标数据应用。Prometheus服务提供云产品监控功能,将这些数据进行统一展现、查询、告警,为运维团队提供更加便捷的日常运维监控界面。
三、Grafana看板增强,让云服务监控更简单
想要更好、更快速的呈现相关指标图表,阿里云Prometheus监控预置Grafana组件,预置常见云服务、应用等看板模板,如应用实时监控服务ARMS、云监控CMS、日志服务SLS、阿里云Elasticsearch等云服务,提供各种云服务的数据源配置及预置大盘,实现各种可观测数据的统一展示。如容器、消息队列Kafka等,进一步提供GrafanaPro大盘,帮助运维进行更加精细化的指标观测。在预置看板之外,可以通过Grafana官方自由增加新插件,添加新的可视化模板以及数据源,进一步满足个性化运维监控需求。
[1] HOST指标
https://help.aliyun.com/document_detail/426468.html?spm=a2c4g.11186623.0.0.741d6a7fW0Lwr5
[2] HDFS指标
https://help.aliyun.com/document_detail/420598.html
[3] YARN指标
https://help.aliyun.com/document_detail/424946.html
[4] Hive指标
https://help.aliyun.com/document_detail/425274.html
[5] ZooKeeper指标
https://help.aliyun.com/document_detail/425464.html
[6] Kafka指标
https://help.aliyun.com/document_detail/425521.html
[7] Impala指标
https://help.aliyun.com/document_detail/427926.html
[8] HUE指标
https://help.aliyun.com/document_detail/428413.html
[9] Kudu指标
https://help.aliyun.com/document_detail/427958.html
[10] ClickHouse指标
https://help.aliyun.com/document_detail/425523.html
[11] Flink指标
https://help.aliyun.com/document_detail/430469.html
[12] EMR控制台
https://emr-next.console.aliyun.com/#/region/cn-hangzhou/resource/all/overview
[13] 阿里云Prometheus
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK