将Dify可观测数据投递至云数据库 ClickHouse 企业版

本文介绍如何将Dify应用的可观测数据投递至云数据库 ClickHouse 企业版,并通过一站式可观测服务进行分析,旨在帮助开发者和运维人员监控应用性能、提升问题解决效率。

前提条件

操作步骤

本文示例中,将在同一台ECS上部署业务服务和Otel Collector。生产环境下,建议独立部署业务服务和Otel Collector。

步骤一:部署Otel Collector

  1. 配置ECS实例。

    1. 购买ECS实例。建议购买时分配公网IP,使ECS具备公网访问能力。

    2. ECS IP地址添加到云数据库ClickHouse白名单中。

      • 私网IP:如果ECS实例与云数据库 ClickHouse 企业版实例位于同一VPC,可以将ECS的私网IP地址添加到白名单中,以下操作中云数据库ClickHouse实例的Endpoint使用VPC地址。

      • 公网IP:如果ECS实例与云数据库 ClickHouse 企业版实例私网不通,可以将ECS的公网IP地址添加到白名单中,以下操作中云数据库ClickHouse实例的Endpoint使用外网地址。

      您可以连接ECS实例,使用以下命令测试ECS云数据库ClickHouse实例之间的连通性,若返回Ok.代表连接正常。

      curl http://cc-xxxxxxx-clickhouse.clickhouseserver.pre.rds.aliyuncs.com:8123
  2. 连接ECS实例,依次执行以下命令,安装otelcol-contrib。

    mkdir llm-demo
    cd llm-demo
    wget -O otelcol-contrib.rpm https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.136.0/otelcol-contrib_0.136.0_linux_amd64.rpm
    yum install otelcol-contrib.rpm
  3. 配置Otel Collector,允许通过grpchttp协议接收可观测数据,并通过http协议投递至云数据库ClickHouse实例。

    复制以下命令并修改相关配置:

    • receivers区域:建议将otlp receiverendpoint替换为Otel Collector服务的endpoint。

    • exporters区域:

      • 配置云数据库ClickHouse实例的连接信息,包括endpoint、usernamepassword。

      • 配置云数据库ClickHouse实例存储可观测数据的库名和表名,包括database、traces_table_name、logs_table_namemetrics_tables。

    cat > /etc/otelcol-contrib/config.yaml << EOF
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
        timeout: 5s
        send_batch_size: 5000
    exporters:
      clickhouse:
        endpoint: http://cc-xxxxxx-clickhouse.clickhouseserver.pre.rds.aliyuncs.com:8123?dial_timeout=10s&compress=lz4&async_insert=1
        username: test
        password: password
        # ttl: 72h
        traces_table_name: otel_traces
        logs_table_name: otel_logs
        metrics_tables:
          gauge: 
            name: otel_metrics_gauge
          sum: 
            name: otel_metrics_sum
          summary: 
            name: otel_metrics_summary
          histogram: 
            name: otel_metrics_histogram
          exponential_histogram: 
            name: otel_metrics_exp_histogram
        create_schema: false
        timeout: 5s
        database: clickobserve_service
        sending_queue:
          queue_size: 1000
        retry_on_failure:
          enabled: true
          initial_interval: 5s
          max_interval: 30s
          max_elapsed_time: 300s
    
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [batch]
          exporters: [clickhouse]
        metrics:
          receivers: [otlp]
          processors: [batch]
          exporters: [clickhouse]
        logs:
          receivers: [otlp]
          processors: [batch]
          exporters: [clickhouse]
    EOF
  4. 启动Otel Collector。

    service otelcol-contrib restart

步骤二:部署并启动Dify

  1. 执行以下命令部署Dify。

    git clone https://github.com/langgenius/dify.git
  2. 依次执行以下命令,修改Dify配置文件。

    cd dify/docker
    cp .env.example .env
    vim .env

    .env配置文件中,找到以下配置项并修改:

    • ENABLE_OTEL:设为true。

    • OTEL_EXPORTER_OTLP_PROTOCOL:设为http。

    • OTLP_BASE_ENDPOINT:设为dify容器可访问的collector服务端点,如http://{ECS本机IP}:4318

  3. 启动Dify服务。

    docker安装请参见安装并使用DockerDocker Compose
    docker compose up -d
  4. 访问http://<IP地址>/install注册用户并登录。IP地址为运行Dify的服务器IP地址。

    image

步骤三:创建聊天助手

  1. 鼠标悬浮于右上角头像处,单击设置

    image

  2. 单击左侧导航栏的模型供应商,选择并安装模型供应商。本文示例选择通义千问。

  3. 安装完成后,在待配置区域,找到对应模型,并单击设置,输入API Key并保存。

    image

  4. Dify界面,单击上方的工作室>聊天助手,然后单击创建空白应用,设置应用名称等信息后,单击创建

    image

  5. 设置提示词。本文提示词示例如下:

    您将充当阿里云ClickHouse数据库的AI智能助手,专门解答客户关于ClickHouse数据库产品及其相关功能的问题。您
    的回答应基于已有的知识库内容,确保准确。如果客户的问题超出了您的知识范围,请坦诚告知他们您不知道答案,
    以保持信息的诚信。请以友好和亲切的语气与客户交流。可以适当地使用表情符号来提升互动体验。
  6. 单击页面右上角的发布>运行,进行对话。

    本文对话示例如下:

    提问

    可以告诉我一些ClickHouse的知识吗?

    返回示例

    当然可以!以下是关于 ClickHouse 的一些关键知识,适合初学者快速入门:
    1. 什么是 ClickHouse?
    开源列式数据库:专为大规模数据处理设计,擅长 OLAP(在线分析处理)场景。
    高性能:通过列式存储、向量化执行引擎和原生并行计算,实现超高速查询。
    兼容 SQL:支持标准 SQL 语法,同时扩展了窗口函数、聚合函数等高级功能。
    分布式架构:支持水平扩展,可轻松处理 PB 级数据。
    2. 核心特性
    列式存储:数据按列存储(而非传统行式),减少 I/O 开销,提升压缩率。
    向量化执行:将数据划分为块(Chunk),批量处理数据,利用 CPU 指令集加速计算。
    多引擎支持:
    MergeTree:默认引擎,支持排序、分区、主键和副本。
    Memory:内存引擎,适合临时数据。
    ......

步骤四:查询与分析可观测数据

  1. 云数据库ClickHouse实例详情页左侧导航栏单击一站式可观测,根据页面提示前往服务入口。

  2. 在主页面上查询并分析Dify应用的可观测数据。

    image