华为云用户手册

  • 通过HSFabric实现KeyTab文件认证 KeyTab文件认证,需要“jaas-zk.conf”、“krb5.conf”和“user.keytab”文件。 “krb5.conf”和“user.keytab”文件参考MRS应用开发安全认证说明章节获得。 “jaas-zk.conf”文件如下定义,“principal”为MRS应用开发安全认证说明中添加的认证用户名称+@+域名(域名为“krb5.conf”文件中的“default_realm”字段值,例如“HADOOP.COM”),“keyTab”为“user.keytab”文件的路径。 Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/opt/client/user.keytab" principal="hivetest@系统域名" useTicketCache=false storeKey=true debug=true; }; “jaas-zk.conf”配置文件中“keyTab”的路径需根据实际的路径修改。 例如: Windows路径:“D:\\hetu-examples\\hetu-examples-security\\src\\main\\resources\\user.keytab”。 Linux路径:“/opt/client/user.keytab”。 父主题: 准备安全认证
  • MRS组件应用开发快速入门 MRS对外提供了基于组件的应用开发样例工程,以下相关快速入门可指导您创建MRS集群后,获取并导入样例工程,并在本地进行编译调测即可实现相应组件的应用开发: HBase应用开发快速入门可实现HBase表创建、数据插入、索引创建、表删除等操作。 HDFS应用开发快速入门可实现HDFS文件目录创建、文件写入、读取、删除等操作。 Hive JDBC应用开发快速入门可实现使用JDBC连接Hive后,在Hive中执行创建表、插入数据、读取数据等操作。 Hive HCatalog应用开发快速入门可实现使用HCatalog连接Hive后,在Hive中创建表、插入数据、读取数据等操作。 Kafka应用开发快速入门可实现流式数据的处理。 Flink应用开发快速入门可实现Flink DataStream程序处理数据操作。 ClickHouse应用开发快速入门可实现ClickHouse表创建、删除以及数据的插入、查询等操作。 Spark应用开发快速入门可实现从Hive表中读取数据并重新写入HBase表操作。
  • 认证代码实例讲解 package com.huawei.bigdata.hdfs.examples; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.security.UserGroupInformation; public class KerberosTest { private static String PATH_TO_HDFS_SITE_XML = KerberosTest.class.getClassLoader().getResource("hdfs-site.xml") .getPath(); private static String PATH_TO_CORE_SITE_XML = KerberosTest.class.getClassLoader().getResource("core-site.xml") .getPath(); private static String PATH_TO_KEYTAB = KerberosTest.class.getClassLoader().getResource("user.keytab").getPath(); private static String PATH_TO_KRB5_CONF = KerberosTest.class.getClassLoader().getResource("krb5.conf").getPath(); private static String PRNCIPAL_NAME = "develop"; private FileSystem fs; private Configuration conf; /** * initialize Configuration */ private void initConf() { conf = new Configuration(); // add configuration files conf.addResource(new Path(PATH_TO_HDFS_SITE_XML)); conf.addResource(new Path(PATH_TO_CORE_SITE_XML)); } /** * login Kerberos to get TGT, if the cluster is in security mode * @throws IOException if login is failed */ private void login() throws IOException { // not security mode, just return if (! "kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) { return; } //security mode System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(PRNCIPAL_NAME, PATH_TO_KEYTAB); } /** * initialize FileSystem, and get ST from Kerberos * @throws IOException */ private void initFileSystem() throws IOException { fs = FileSystem.get(conf); } /** * An example to access the HDFS * @throws IOException */ private void doSth() throws IOException { Path path = new Path("/tmp"); FileStatus fStatus = fs.getFileStatus(path); System.out.println("Status of " + path + " is " + fStatus); //other thing } public static void main(String[] args) throws Exception { KerberosTest test = new KerberosTest(); test.initConf(); test.login(); test.initFileSystem(); test.doSth(); } } Kerberos认证时需要配置Kerberos认证所需要的文件参数,主要包含keytab路径,Kerberos认证的用户名称,Kerberos认证所需要的客户端配置krb5.conf文件。 方法login()为调用hadoop的接口执行Kerberos认证,生成TGT票据。 方法doSth()调用hadoop的接口访问文件系统,此时底层RPC会自动携带TGT去Kerberos认证,生成ST票据。 以上代码可在安全模式下的HDFS二次开发样例工程中创建KerberosTest.java,运行并查看调测结果,具体操作过程请参考HDFS开发指南(安全模式)。
  • 认证失败样例 解决认证出现如下关键字:clock skew too great的问题 检查集群时间。 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。 解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。 检查Kerberos服务是否正常。 检查防火墙是否关闭。 解决客户端应用提交任务到hadoop集群抛异常,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。 //进程入口首次登录,登录成功设置userGroupInformation UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile); //线程提交任务之前: UserGroupInformation.getLoginUser().reloginFromKeytab(); 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。
  • 处理流程 出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查: 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。 确认各个配置文件是否被正确读取到,路径是否保存正确。 确认用户名和keytab文件是按操作指导得到的。 确认各类配置信息是否已经先设置好了,再发起认证。 确认没有在同一个进程中发起多次认证,即重复调用login()方法。 若还有问题,需联系技术支持人员做进一步分析。
  • Hive SQL Hive SQL支持Hive-3.1.0版本中的所有特性,详情请参见https://cwiki.apache.org/confluence/display/hive/languagemanual。 FusionInsight系统提供的扩展Hive语句如表1所示。 表1 扩展Hive语句 扩展语法 语法说明 语法示例 示例说明 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...) ] ...... [TBLPROPERTIES ("groupId"=" group1 ","locatorId"="locator1")] ...; 创建一个hive表,并指定表数据文件分布的locator信息。详细说明请参见使用HDFS Colocation存储Hive表。 CREATE TABLE tab1 (id INT, name STRING) row format delimited fields terminated by '\t' stored as RCFILE TBLPROPERTIES("groupId"=" group1 ","locatorId"="locator1"); 创建表tab1,并指定tab1的表数据分布在locator1节点上。 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...) ] ... [TBLPROPERTIES ('column.encode.columns'='col_name1,col_name2'| 'column.encode.indices'='col_id1,col_id2', 'column.encode.classname'='encode_classname')]...; 创建一个hive表,并指定表的加密列和加密算法。详细说明请参见使用Hive列加密功能。 create table encode_test(id INT, name STRING, phone STRING, address STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('column.encode.indices'='2,3', 'column.encode.classname'='org.apache.hadoop.hive.serde2.SMS4Rewriter') STORED AS TEXTFILE; 创建表encode_test,并指定插入数据时对第2、3列加密,加密算法类为org.apache.hadoop.hive.serde2.SMS4Rewriter。 REMOVE TABLE hbase_tablename [WHERE where_condition]; 删除hive on hbase表中符合条件的数据。详细说明请参见删除Hive on HBase表中的单行记录。 remove table hbase_table1 where id = 1; 删除表中符合条件“id =1”的数据。 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] STORED AS inputformat 'org.apache.hadoop.hive.contrib.fileformat.SpecifiedDelimiterInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 创建hive表,并设定表可以指定自定义行分隔符。详细说明请参见自定义行分隔符。 create table blu(time string, num string, msg string) row format delimited fields terminated by ',' stored as inputformat 'org.apache.hadoop.hive.contrib.fileformat.SpecifiedDelimiterInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 创建表blu,指定inputformat为SpecifiedDelimiterInputFormat,以便查询时可以指定表的查询行分隔符。 父主题: 对外接口
  • 采集CCE集群的业务数据 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 配置信息如下: apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: kafka-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter 所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: metric-port selector: matchLabels: k8s-app: kafka-exporter
  • 添加采集任务 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: redis-exporter namespace: default spec: namespaceSelector: #选择要监控 Exporter Pod 所在的namespace matchNames: - default # exporter所在的命名空间 podMetricsEndpoints: - interval: 30s # 设置指标采集周期 path: /metrics # 填写 Prometheus Exporter 对应的 path 的值,默认/metrics port: metric-port# 填写 Prometheus Exporter 对应的 YAML 的 ports 的 name selector: # 填写要监控 Exporter Pod 的 Label 标签,以定位目标 Exporter matchLabels: k8s-app: redis-exporter
  • 添加采集任务 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下示例中指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: memcached-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: metric-port selector: matchLabels: k8s-app: memcached-exporter
  • PostgreSQL Exporter 部署 登录CCE控制台。 单击已接入的集群名称,进入该集群的管理页面。 执行以下操作完成Exporter部署。 使用Secret管理PostgreSQL密码。 在左侧导航栏中选择“工作负载”,在右上角单击“YAML创建”完成YAML配置。YAML配置说明:使用Kubernetes的Secret来管理密码并对密码进行加密处理,在启动PostgreSQL Exporter的时候直接使用Secret Key,需要调整对应的password。 YAML 配置示例如下: apiVersion: v1 kind: Secret metadata: name: postgres-test type: Opaque stringData: username: postgres password: you-guess #对应 PostgreSQL 密码 部署PostgreSQL Exporter。 在左侧导航栏中选择“工作负载”,在右上角单击“YAML创建”,以YAML的方式部署Exporter。 YAML配置示例如下(请直接复制下面的内容,根据实际业务调整相应的参数): apiVersion: apps/v1 kind: Deployment metadata: name: postgres-test # 根据业务需要调整成对应的名称,建议加上 PG 实例的信息 namespace: default #需要和 postgres 的 service 在同一命名空间 labels: app: postgres app.kubernetes.io/name: postgresql spec: replicas: 1 selector: matchLabels: app: postgres app.kubernetes.io/name: postgresql template: metadata: labels: app: postgres app.kubernetes.io/name: postgresql spec: containers: - name: postgres-exporter image: swr.cn-north-4.myhuaweicloud.com/aom-exporter/postgres-exporter:v0.8.0 # 上传至 SWR 的 postgres-exporter 镜像 args: - "--web.listen-address=:9187" # Exporter 开启的端口 - "--log.level=debug" # 日志级别 env: - name: DATA_SOURCE_USER valueFrom: secretKeyRef: name: postgres-test # 对应上一步中的 Secret 的名称 key: username # 对应上一步中的 Secret Key - name: DATA_SOURCE_PASS valueFrom: secretKeyRef: name: postgres-test # 对应上一步中的 Secret 的名称 key: password # 对应上一步中的 Secret Key - name: DATA_SOURCE_URI value: "x.x.x.x:5432/postgres?sslmode=disable" # 对应的连接信息 ports: - name: http-metrics containerPort: 9187 获取指标。 通过“curl http://exporter:9187/metrics”无法获取Postgres实例运行时间,可以通过自定义一个queries.yaml来获取该指标。 创建一个包含queries.yaml的配置。 将配置作为Volume挂载到Exporter某个目录下。 通过extend.query-path来使用配置,将上述的Secret以及Deployment进行汇总,汇总后的YAML如下所示: # 以下 document 创建一个包含自定义指标的 queries.yaml --- apiVersion: v1 kind: ConfigMap metadata: name: postgres-test-configmap namespace: default data: queries.yaml: | pg_postmaster: query: "SELECT pg_postmaster_start_time as start_time_seconds from pg_postmaster_start_time()" master: true metrics: - start_time_seconds: usage: "GAUGE" description: "Time at which postmaster started" # 以下 document 挂载了 Secret 和 ConfigMap ,定义了部署 Exporter 相关的镜像等参数 --- apiVersion: apps/v1 kind: Deployment metadata: name: postgres-test namespace: default labels: app: postgres app.kubernetes.io/name: postgresql spec: replicas: 1 selector: matchLabels: app: postgres app.kubernetes.io/name: postgresql template: metadata: labels: app: postgres app.kubernetes.io/name: postgresql spec: containers: - name: postgres-exporter image: wrouesnel/postgres_exporter:latest args: - "--web.listen-address=:9187" - "--extend.query-path=/etc/config/queries.yaml" - "--log.level=debug" env: - name: DATA_SOURCE_USER valueFrom: secretKeyRef: name: postgres-test-secret key: username - name: DATA_SOURCE_PASS valueFrom: secretKeyRef: name: postgres-test-secret key: password - name: DATA_SOURCE_URI value: "x.x.x.x:5432/postgres?sslmode=disable" ports: - name: http-metrics containerPort: 9187 volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: postgres-test-configmap --- apiVersion: v1 kind: Service metadata: name: postgres spec: type: NodePort selector: app: postgres app.kubernetes.io/name: postgresql ports: - protocol: TCP nodePort: 30433 port: 9187 targetPort: 9187 访问地址: http://{集群任意节点的公网IP}:30433/metrics,即可通过自定义的queries.yaml查询到Postgres实例启动时间指标。 图1 访问地址
  • 添加采集任务 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: postgres-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter 所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: http-metrics selector: matchLabels: app: postgres
  • 操作场景 使用MongoDB过程中需要对MongoDB运行状态进行监控,以便了解MongoDB服务是否运行正常,排查MongoDB故障问题原因。Prometheus监控服务提供了CCE容器场景下基于Exporter的方式来监控MongoDB运行状态。本文介绍如何部署Exporter以及实现MongoDB Exporter告警接入等操作。 为了方便安装管理Exporter,推荐使用CCE进行统一管理。
  • 采集CCE集群的业务数据 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 配置信息如下: apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: mysql-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter 所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: metric-port selector: matchLabels: k8s-app: mysql-exporter
  • 数据库授权 登录集群执行以下命令: kubectl exec -it ${mysql_podname} bash mysql -u root -p 图1 执行命令 登录数据库,执行以下命令: CREATE USER 'exporter'@'x.x.x.x(hostip)' IDENTIFIED BY 'xxxx(password)' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'x.x.x.x(hostip)'; 验证授权是否成功。 输入以下命令查询sql,查看是否有exporter的数据,host为mysql所在节点的IP。 select user,host from mysql.user; 图2 查询sql
  • 采集CCE集群的业务数据 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下示例中指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: elasticSearch-exporter namespace: default spec: namespaceSelector: # 选择监控Exporter部署所在的namespace matchNames: - default # exporter所在的命名空间 podMetricsEndpoints: - interval: 30s # 设置指标采集周期 path: /metrics # 填写Prometheus Exporter对应的Path的值,默认/metrics port: metric-port # 填写Prometheus Exporter对应YAML的ports的name selector: # 填写要监控Exporter Pod的Label标签,以定位目标Exporter matchLabels: k8s-app: elasticSearch-exporter
  • 操作场景 使用ElasticSearch过程中需要对ElasticSearch运行状态进行监控,例如集群及索引状态等。Prometheus监控服务提供了CCE容器场景下基于Exporter的方式来监控ElasticSearch运行状态。本文介绍如何部署ElasticSearch Exporter以及实现ElasticSearch Exporter告警接入等操作。 为了方便安装管理Exporter,推荐使用CCE进行统一管理。
  • 采集CCE集群的业务数据 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 配置信息如下: apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: kafka-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter 所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: metric-port selector: matchLabels: k8s-app: kafka-exporter
  • 添加采集任务 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: postgres-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter 所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: http-metrics selector: matchLabels: app: postgres
  • PostgreSQL Exporter 部署 登录CCE控制台。 单击已接入的集群名称,进入该集群的管理页面。 执行以下操作完成Exporter部署。 使用Secret管理PostgreSQL密码。 在左侧导航栏中选择“工作负载”,在右上角单击“YAML创建”完成YAML配置。YAML配置说明:使用Kubernetes的Secret来管理密码并对密码进行加密处理,在启动PostgreSQL Exporter的时候直接使用Secret Key,需要调整对应的password。 YAML 配置示例如下: apiVersion: v1 kind: Secret metadata: name: postgres-test type: Opaque stringData: username: postgres password: you-guess #对应 PostgreSQL 密码 部署PostgreSQL Exporter。 在左侧导航栏中选择“工作负载”,在右上角单击“YAML创建”,以YAML的方式部署Exporter。 YAML配置示例如下(请直接复制下面的内容,根据实际业务调整相应的参数): apiVersion: apps/v1 kind: Deployment metadata: name: postgres-test # 根据业务需要调整成对应的名称,建议加上 PG 实例的信息 namespace: default #需要和 postgres 的 service 在同一命名空间 labels: app: postgres app.kubernetes.io/name: postgresql spec: replicas: 1 selector: matchLabels: app: postgres app.kubernetes.io/name: postgresql template: metadata: labels: app: postgres app.kubernetes.io/name: postgresql spec: containers: - name: postgres-exporter image: swr.cn-north-4.myhuaweicloud.com/aom-exporter/postgres-exporter:v0.8.0 # 上传至 SWR 的 postgres-exporter 镜像 args: - "--web.listen-address=:9187" # Exporter 开启的端口 - "--log.level=debug" # 日志级别 env: - name: DATA_SOURCE_USER valueFrom: secretKeyRef: name: postgres-test # 对应上一步中的 Secret 的名称 key: username # 对应上一步中的 Secret Key - name: DATA_SOURCE_PASS valueFrom: secretKeyRef: name: postgres-test # 对应上一步中的 Secret 的名称 key: password # 对应上一步中的 Secret Key - name: DATA_SOURCE_URI value: "x.x.x.x:5432/postgres?sslmode=disable" # 对应的连接信息 ports: - name: http-metrics containerPort: 9187 获取指标。 通过“curl http://exporter:9187/metrics”无法获取Postgres实例运行时间,可以通过自定义一个queries.yaml来获取该指标。 创建一个包含queries.yaml的配置。 将配置作为Volume挂载到Exporter某个目录下。 通过extend.query-path来使用配置,将上述的Secret以及Deployment进行汇总,汇总后的YAML如下所示: # 以下 document 创建一个包含自定义指标的 queries.yaml --- apiVersion: v1 kind: ConfigMap metadata: name: postgres-test-configmap namespace: default data: queries.yaml: | pg_postmaster: query: "SELECT pg_postmaster_start_time as start_time_seconds from pg_postmaster_start_time()" master: true metrics: - start_time_seconds: usage: "GAUGE" description: "Time at which postmaster started" # 以下 document 挂载了 Secret 和 ConfigMap ,定义了部署 Exporter 相关的镜像等参数 --- apiVersion: apps/v1 kind: Deployment metadata: name: postgres-test namespace: default labels: app: postgres app.kubernetes.io/name: postgresql spec: replicas: 1 selector: matchLabels: app: postgres app.kubernetes.io/name: postgresql template: metadata: labels: app: postgres app.kubernetes.io/name: postgresql spec: containers: - name: postgres-exporter image: wrouesnel/postgres_exporter:latest args: - "--web.listen-address=:9187" - "--extend.query-path=/etc/config/queries.yaml" - "--log.level=debug" env: - name: DATA_SOURCE_USER valueFrom: secretKeyRef: name: postgres-test-secret key: username - name: DATA_SOURCE_PASS valueFrom: secretKeyRef: name: postgres-test-secret key: password - name: DATA_SOURCE_URI value: "x.x.x.x:5432/postgres?sslmode=disable" ports: - name: http-metrics containerPort: 9187 volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: postgres-test-configmap --- apiVersion: v1 kind: Service metadata: name: postgres spec: type: NodePort selector: app: postgres app.kubernetes.io/name: postgresql ports: - protocol: TCP nodePort: 30433 port: 9187 targetPort: 9187 访问地址: http://{集群任意节点的公网IP}:30433/metrics,即可通过自定义的queries.yaml查询到Postgres实例启动时间指标。 图1 访问地址
  • 操作场景 使用MongoDB过程中需要对MongoDB运行状态进行监控,以便了解MongoDB服务是否运行正常,排查MongoDB故障问题原因。Prometheus监控服务提供了CCE容器场景下基于Exporter的方式来监控MongoDB运行状态。本文介绍如何部署Exporter以及实现MongoDB Exporter告警接入等操作。 为了方便安装管理Exporter,推荐使用CCE进行统一管理。
  • 添加采集任务 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: redis-exporter namespace: default spec: namespaceSelector: #选择要监控 Exporter Pod 所在的namespace matchNames: - default # exporter所在的命名空间 podMetricsEndpoints: - interval: 30s # 设置指标采集周期 path: /metrics # 填写 Prometheus Exporter 对应的 path 的值,默认/metrics port: metric-port# 填写 Prometheus Exporter 对应的 YAML 的 ports 的 name selector: # 填写要监控 Exporter Pod 的 Label 标签,以定位目标 Exporter matchLabels: k8s-app: redis-exporter
  • 基本概念 本文汇总使用Prometheus监控过程中涉及的基本概念,方便您查询和了解相关概念。 表1 基本概念 概念 说明 Exporter 一个采集监控数据并通过Prometheus监控功能规范对外提供数据的组件。目前有上百个官方或者第三方 Exporter可供使用,具体请参见Exporter详情。 Job 一组Target的配置集合。定义了抓取间隔,访问限制等作用于一组Target的抓取行为。 Prometheus 监控 Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘和全面托管的Prometheus服务。 Prometheus实例 Prometheus监控功能提供的管理Prometheus数据采集和数据存储分析的逻辑单元。 Prometheus探针 部署在用户侧或者云产品侧Kubernetes集群。负责自动发现采集目标、采集指标和远程写到其他库。 PromQL Prometheus监控的查询语言。支持瞬时查询和时间跨度查询,内置多种函数和操作符。可以对原始数据进行聚合、切片、预测和联合。 Sample 一条时间线在某个时间点对应的数值。在Prometheus监控服务中,每个Sample由一个float64数据类型的值和一个毫秒精度的时间戳构成。 Target Prometheus探针要抓取的采集目标。采集目标暴露自身运行、业务指标,或者代理暴露监控对象的运行、业务指标。 告警规则 Prometheus监控Alerting Rule格式的告警配置。可以通过PromQL描述。 标签 描述指标的一组Key-Value值。 服务发现 Prometheus监控的功能特点之一,无需静态配置,可以自动发现采集目标。支持Kubernetes SD、Consul、Eureka等多种服务发现方式,支持通过ServiceMonitor、PodMonitor的方式暴露采集目标。 预聚合 Prometheus监控的Recording Rule能力。可以通过PromQL将原始数据加工成新的指标,提升查询效率。 时间序列 由指标名和标签组成。属于同一指标和同一组标签维度的带时间戳的流。 远程存储 自研的时序数据存储组件。支持Prometheus监控的Remote Write协议,由云产品全面托管。 云产品监控 无缝集成了多种云产品的监控数据。用户如果有云产品的监控需求,可以通过接入云产品监控实施。 指标 采集目标暴露的、可以完整反映监控对象运行或者业务状态的一系列标签化数据。Prometheus监控采用OpenMetrics的标准数据格式描述指标。 父主题: Prometheus监控简介
  • 产品优势 表1 产品优势 开箱即用 一键安装部署即可监控Kubernetes以及各类云产品。 一键接入各种应用组件及告警工具。 低成本 多种指标免费用,覆盖Kubernetes标准组件。 提供全托管式服务,无需另购资源,可降低监控成本,且维护成本几乎为零。 与CCE集成并提供监控服务,容器监控体系创建时间从2天降低至10分钟。一个Prometheus For CCE实例可以上报多个CCE集群数据。 开源兼容 支持自定义多维数据模型、HTTP API模块、PromQL查询。 静态文件配置和动态发现机制发现监控对象,实现轻松迁移及接入。 数据规模无上限 凭借云存储能力,数据存储无上限,不再受限于本地容量。云端分布式存储保障数据可靠性。 通过Prometheus实例 for 多账号聚合实例将多个资源账号的指标数据汇聚到一个Prometheus实例,实现统一监控。 高性能 相较开源版本结构更轻量,资源消耗更低。通过单进程一体化Agent监控Kubernetes集群,采集性能提升20倍。 Agent部署在用户侧,保留原生采集能力同时能够最大程度的减少资源的使用。 通过采集存储分离架构,全面提升整体性能。 采集组件优化,提升单副本采集能力,降低资源消耗。 通过多副本横向扩展均衡分解采集任务,实现动态扩缩,解决开源水平扩展问题。 高可用性 双副本:数据采集、处理和存储组件支持多副本横向扩展,核心数据链路高可用。 水平扩展:基于集群规模可直接进行弹性扩容。 父主题: Prometheus监控简介
  • 添加采集任务 通过新增PodMonitor方式为应用配置可观测监控Prometheus版的采集规则,监控部署在CCE集群内的应用的业务数据。 如下示例中指标采集的周期是30秒,所以等待大概30秒后才能在AOM的界面上查看到上报的指标。 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: memcached-exporter namespace: default spec: namespaceSelector: matchNames: - default # exporter所在的命名空间 podMetricsEndpoints: - interval: 30s path: /metrics port: metric-port selector: matchLabels: k8s-app: memcached-exporter
  • 数据库账号权限要求 在使用DRS进行灾备时,连接业务数据库和灾备数据库的账号需要满足以下权限要求,才能启动实时灾备任务。不同类型的灾备任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 所需权限 业务数据库连接账号 需要具备如下权限: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION。 GaussDB(for MySQL)实例的root账户默认已具备上述权限。 灾备 数据库连接账号 需要具备如下权限: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION。 GaussDB(for MySQL)实例的root账户默认已具备上述权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接业务和灾备数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表2中为DRS任务所需的最小权限,如果需要DRS任务迁移grant授权的情况下,请确保DRS任务的连接账号本身具备对应权限,否则可能因为grant授权执行失败导致目标库对应用户缺少授权。例如DRS任务的连接账号本身不要求process权限,如果需要通过DRS任务迁移process授权则需要保证DRS任务的连接账号具备该权限。
  • 使用建议 灾备初始化阶段,请不要在业务数据库执行DDL操作,否则可能导致任务异常。 灾备初始化阶段,确保灾备数据库无业务写入,保证灾备前后数据一致。 数据库灾备与环境多样性和人为操作均有密切关系,为了确保灾备的平顺,建议您在进行正式的数据库灾备之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,选择业务低峰期开始运行灾备任务,避免灾备任务对业务造成性能影响。 在网络无瓶颈的情况下,灾备初始化阶段会对业务数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 灾备无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。 正在灾备的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 灾备初始化阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 使用建议 灾备初始化阶段,请不要在业务数据库执行DDL操作,否则可能导致任务异常。 灾备初始化阶段,确保灾备数据库无业务写入,保证灾备前后数据一致。 数据库灾备与环境多样性和人为操作均有密切关系,为了确保灾备的平顺,建议您在进行正式的数据库灾备之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,选择业务低峰期开始运行灾备任务,避免灾备任务对业务造成性能影响。 在网络无瓶颈的情况下,灾备初始化阶段会对业务数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 灾备无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。 正在灾备的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 灾备初始化阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 数据库账号权限要求 在使用DRS进行灾备时,连接业务数据库和灾备数据库的账号需要满足以下权限要求,才能启动实时灾备任务。不同类型的灾备任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 所需权限 业务数据库连接账号 需要具备如下权限: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION。 RDS for MySQL实例的root账户默认已具备上述权限。 灾备数据库连接账号 需要具备如下权限: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION。 GaussDB(for MySQL)实例的root账户默认已具备上述权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接业务和灾备数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表2中为DRS任务所需的最小权限,如果需要DRS任务迁移grant授权的情况下,请确保DRS任务的连接账号本身具备对应权限,否则可能因为grant授权执行失败导致目标库对应用户缺少授权。例如DRS任务的连接账号本身不要求process权限,如果需要通过DRS任务迁移process授权则需要保证DRS任务的连接账号具备该权限。
  • 数据库账号权限要求 在使用DRS进行灾备时,连接业务数据库和灾备数据库的账号需要满足以下权限要求,才能启动实时灾备任务。不同类型的灾备任务,需要的账号权限也不同,详细可参考表2进行赋权。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 表2 数据库账号权限 类型名称 所需权限 业务数据库连接账号 需要具备如下权限: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION,RDS for MySQL实例的root账户默认已具备上述权限。当业务数据库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 灾备数据库连接账号 需要具备如下权限: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、TRIGGER、REFERENCES、SHOW VIEW、EVENT、INDEX、LOCK TABLES、CREATE VIEW、 CREATE ROUTINE、 ALTER ROUTINE、 CREATE USER、RELOAD、REPLICATION SLAVE、REPLICATION CLIENT、WITH GRANT OPTION,RDS for MySQL实例的root账户默认已具备上述权限。当灾备数据库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 建议创建单独用于DRS任务连接的数据库账号,避免因为数据库账号密码修改,导致的任务连接失败。 连接业务和灾备数据库的账号密码修改后,请尽快修改DRS任务中的连接信息,避免任务连接失败后自动重试,导致数据库账号被锁定影响使用。 表2中为DRS任务所需的最小权限,如果需要DRS任务迁移grant授权的情况下,请确保DRS任务的连接账号本身具备对应权限,否则可能因为grant授权执行失败导致目标库对应用户缺少授权。例如DRS任务的连接账号本身不要求process权限,如果需要通过DRS任务迁移process授权则需要保证DRS任务的连接账号具备该权限。
  • 使用建议 灾备初始化阶段,请不要在业务数据库执行DDL操作,否则可能导致任务异常。 灾备初始化阶段,确保灾备数据库无业务写入,保证灾备前后数据一致。 数据库灾备与环境多样性和人为操作均有密切关系,为了确保灾备的平顺,建议您在进行正式的数据库灾备之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,选择业务低峰期开始运行灾备任务,避免灾备任务对业务造成性能影响。 在网络无瓶颈的情况下,灾备初始化阶段会对业务数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 灾备无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。 正在灾备的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 灾备初始化阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
共100000条