计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

QingTian Enclave日志转发工具

更新时间:2024-12-31 GMT+08:00

QingTian Enclave日志转发工具(qlog)概述

qlog(QingTian Enclave log)是QingTian Enclave的运维工具。QingTian Enclave是运行在QingTian架构虚拟机中完全隔离的子虚拟机,即使是root用户也不能直接通过ssh登入。因此,为了方便运维人员监控运行在QingTian Enclave中的业务和定位问题,我们推出了qlog工具。qlog可以收集QingTian Enclave虚拟机中指定的日志文件和资源使用情况,并将结果发送到父虚拟机中。目前qlog支持收集QingTian Enclave中的资源使用情况包括CPU使用率和内存使用率。

qlog是一个可执行二进制文件,需要在父虚拟机中和QingTian Enclave中通过不同的命令运行:

  • 在父虚拟机中,通过执行“/path/to/qlog receive-file <cid>/path/to/config_qlog.toml”命令启用qlog。
  • 在QingTian Enclave中,通过执行“/path/to/qlog monitor /path/to/config_qlog.toml”命令启用qlog。

传统虚拟机中业务的日志会直接存储在类似“/var/log/service.log”的目录文件当中。

在将业务移植到QingTian Enclave中之后,通过qlog工具,可以将上述日志文件("/var/log/service.log")导出到父虚拟机当中。

使用同一个qlog二进制文件,通过qlog receive-fileqlog monitor命令,使其分别运行在父虚拟机和QingTian Enclave中,两者会建立基于local vsock的通信链路。运行在QingTian Enclave中的qlog组件会收集指定的业务日志或QingTian Enclave的资源使用情况,将收集到的数据发送给父虚拟机中的qlog组件。父虚拟机中的qlog组件再将接收到的数据储存到指定的文件中,如“/var/log/qlog/service.log”。

图1 网络服务无感迁移至QingTian Enclave

本文介绍qlog的操作步骤。

前提条件

  1. 获取qlog程序。

    克隆QingTian Enclave代码仓。

    git clone https://gitee.com/HuaweiCloudDeveloper/huawei-qingtian.git
  2. 获取cargo工具链。
    1. 执行下述命令安装rustup
      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    2. 安装完成后执行下述命令加载rustup
      source $HOME/.cargo/env
    3. 执行下述命令验证rustc和cargo安装成功
      rustc -V
      cargo -V
  3. qlog的前置依赖。
    表1 前置依赖

    依赖项

    最低测试版本

    glibc

    2.34

    cargo

    1.77.0

  4. QingTian Enclave的环境准备。
    1. 安装qt CLI工具和其他必要rpm包。
    2. 安装Docker。
    3. 安装python3以及几个必要的python module : docker和knack。

    详细内容,请参考快速入门安装qt CLI

操作步骤

  1. 构建qlog

    进入qingtian-tools/qlog目录中,执行cargo命令:

    cargo build --release

    生成的qlog程序在目录qingtian-tools/qlog/target/release下。

  2. 创建工作目录

    新建工作目录workspace,将qlog程序拷贝到workspace下,后续创建的文件都放在workspace中。

  1. 配置config_qlog.toml

    在workspace目录中创建config_qlog.toml文件,内容如下:

    port: 6000
    workspace: /var/log/qlog 
    server_logfile: server.log 
    client_logfile: client.log 
    server_threads: 4
    client_threads: 1
    log_level: info 
    rotate_size: 65536
    rotate_num: 10
    monitor_items:  
      - name: service  #业务名    
        monitor_type: file     
        monitor_path: /var/log/service.log  #QingTian Enclave中业务日志的路径    
        outputfile: service.log  #同步到父虚拟机中的日志文件名  
      - name: resource     
        monitor_type: resource     
        monitor_internel: 15    
        outputfile: resource.log

  2. 制作含qlog的QingTian Enclave镜像

    1. 在workspace目录中创建start.sh脚本:
      #/bin/bash
      /root/qlog monitor /root/config_qlog.toml & 
      
      LOG_FILE="/var/log/service.log"
      LOG_MESSAGE="Hello, service." 
      
      while true; do    
          TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')    
          echo "$TIMESTAMP - $LOG_MESSAGE" >> "$LOG_FILE"    
          sleep 3
      done
    1. 赋予start.sh脚本执行权限,在workspace目录中执行下述命令:
      chmod +x start.sh
    2. 在workspace目录中创建Dockerfile文件,内容如下:
      FROM ubuntu:latest 
      COPY ./qlog /root/qlog 
      COPY ./config_qlog.toml /root/config_qlog.toml 
      COPY ./start.sh /root/start.sh 
      CMD /root/start.sh
    3. 赋予start.sh执行权限,在workspace目录中执行以下命令:
      chmod +x start.sh
    4. 制作docker镜像,在workspace目录中运行以下命令:
      docker build -f Dockerfile -t test_qlog_enclave .
    5. 制作QingTian Enclave镜像,在workspace目录中运行以下命令:
      qt enclave make-img --docker-uri test_qlog_enclave --eif test_qlog_enclave.eif

  3. 启动qlog

    1. 启动一台QingTian Enclave,在workspace目录中运行下述命令:
      qt enclave start --cpus 2 --mem 1024 --cid 4 --eif test_qlog_enclave.eif
    2. 启动父虚拟机中的qlog,在workspace目录中运行下述命令:
      ./qlog receive-file 4 ./config_qlog.toml &
    3. 父虚拟机中执行下述命令,查看service日志:
      tail -F /var/log/qlog/service.log

      可以看到每3s,打印一行日志"Hello, service."。

    4. 父虚拟机中执行下述命令,查看QingTian Enclave中资源使用情况:
      tail -F /var/log/qlog/resource.log

      可以看到每15s,打印一次CPU使用率和内存使用率。

qlog帮助信息

qlog help

$ qlog --help
A tool to monitor logs and resource usage over a Vsock connection  

Usage: qlog <COMMAND> 

Commands:   
  monitor       Monitor resource usage   
  receive-file  Receive data from qlog monitor   
  help          Print this message or the help of the given subcommand(s) 

Options:   
  -h, --help  Print help

qlog monitor help

$ qlog help monitor 
Monitor logs and/or resource usage  

Usage: qlog monitor [OPTIONS] <CONFIG> 

Arguments:   
  <CONFIG>  A configuration file in yaml format, which defines items to be monitored  

Options:   
  -c, --cid <CID>  CID to listen on (defaults to VMADDR_CID_ANY) [default: 4294967295]  
  -h, --help       Print help

qlog receive-file help

$ qlog help receive-file 
Receive data from qlog monitor  

Usage: qlog receive-file [OPTIONS] <CID> <CONFIG> 

Arguments:   
  <CID>     Enclave VM's CID   
  <CONFIG>  A configuration file in yaml format, which defines items to be monitored  

Options:   
  -w, --workspace <WORKSPACE>  Set to workspace if specified, prior to configuration file  
  -h, --help                   Print help

配置信息(Config)

表2 配置参数解释

Variable

Type

Description

port

u32

vsock端口

workspace

String

写入进程日志和监控数据的工作空间

server_logfile

String

将服务器端(qlog monitor)进程日志写入<workspace>/<server_logfile>

client_logfile

String

将客户端(qlog receive-file)进程日志写入<workspace>/<client_logfile>

server_threads

u32

服务器端(qlog monitor)线程数量

client_threads

u32

客户端(qlog receive-file)线程数量

log_level

String

日志等级(TRACE/DEBUG/INFO/WARN/ERROR/OFF)

rotate_size

u32

可选参数:日志文件转储大小,默认是2MB

rotate_num

u32

可选参数:日志文件转储时,保留旧日志文件数量,默认是10

monitor_items

Vector

监控事物列表

表3 监控项参数解释

Variable

Type

Description

name

String

事物名称

monitor_type

String

监控类型:file表示日志文件,resource表示资源使用

monitor_path

String

可选参数,QingTian Enclave中要监控的日志文件路径,monitor_type只能是file

monitor_internel

u32

可选参数,资源监视间隔时间,单位是秒,默认值是15,monitor_type只能是resource

outputfile

String

监控数据文件名称,写入监控数据的路径是<workspace>/<outputfile>

配置文件参考

port: 6000
workspace: /var/log/qlog 
server_logfile: server.log 
client_logfile: client.log 
server_threads: 4
client_threads: 1
log_level: info 
rotate_size: 65536
rotate_num: 10
monitor_items:  
  - name: item1     
    monitor_type: file     
    monitor_path: /var/log/item1.log     
    outputfile: output1.log   
  - name: item2     
    monitor_type: file     
    monitor_path: /var/log/item2.log     
    outputfile: output2.log   
  - name: item3     
    monitor_type: file     
    monitor_path: /var/log/item3.log     
    outputfile: output3.log   
  - name: item4     
    monitor_type: file     
    monitor_path: /var/log/item4.log     
    outputfile: output4.log   
  - name: item5     
    monitor_type: resource     
    monitor_internel: 15    
    outputfile: output5.log

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容