Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Integrar aplicações Dify ao monitoramento de aplicações do ARMS

Última atualização: Aug 26, 2026

Este tópico descreve como integrar aplicações Dify ao Monitoramento de Aplicações do ARMS.

Visão geral dos componentes

  1. Aplicação de workflow (aplicação LLM): Aplicação de Large Language Model (LLM) construída na interface visual do Dify. Geralmente existe como um workflow ou chatbot e define a lógica da aplicação, prompts, seleção de modelos, tratamento de variáveis, ramificações condicionais e chamadas de ferramentas.

  2. dify-api (API do Motor de Execução): service de backend principal do Dify. Recebe requisições do front-end, gerencia dados de usuários e aplicações, agenda execuções de workflows, chama LLMs, coordena chamadas de plugins e retorna os resultados finais.

  3. dify-plugin-daemon (Motor de Plugins): Motor de plugins do Dify usado para executar plugins oficiais ou definidos pelo usuário em um ambiente seguro e isolado.

  4. nginx (gateway de entrada): Gateway de entrada do Dify para roteamento de tráfego.

Os componentes do Dify evoluem rapidamente, e os métodos de monitoramento variam entre as diferentes versões. A tabela a seguir detalha os métodos de integração para os componentes em cada versão.

Versão

Integração de workflow

Integração do dify-api

Integração do dify-plugin-daemon

Integração do Nginx

Anterior à 1.6.0

Use o agente Python do ARMS. (Integre o agente ao componente dify-api.)

Use o agente Python do ARMS.

Use o agente Golang do ARMS.

Use OpenTelemetry.

1.6.0 ou posterior, anterior à 1.11.2

Reporte dados usando o recurso Dify application observability integration.

Use o agente Python do ARMS.

Use o agente Golang do ARMS.

Use OpenTelemetry.

1.11.2 ou posterior

Use o agente Python do ARMS. (Integre o agente ao componente dify-api. Versões mais recentes possuem essa capacidade nativa.)

Use o agente Python do ARMS.

Use o agente Golang do ARMS.

Use OpenTelemetry.

1.13.0 ou posterior

Consulte Configurar OTel para Dify. Configure as variáveis de ambiente correspondentes no componente dify-worker. Para obter o endpoint do OTel, consulte Prerequisites.

Use o agente Python do ARMS.

Use o agente Golang do ARMS.

Importante
  • Se você usar o Dify por meio do componente ack-dify no Container Service for Kubernetes (ACK), faça a integração com um clique atualizando o Helm chart. Atualize o componente ack-dify na página Applications do seu cluster ACK:

No painel Helm Chart Update Release, localize a seção de configuração arms na configuração de parâmetros (Values) da versão alvo e defina enabled como true.

Alternativamente, configure as definições relevantes ao criar o componente ack-dify para ativar o Monitoramento de Aplicações do ARMS:

No editor YAML da configuração de parâmetros, defina enabled como true na seção de configuração arms.

Pré-requisitos

  • ack-onepilot versão 5.1.2 ou posterior

  • Agente Python versão 2.2.0 ou posterior

Procedimento

Etapa 1: Integrar o componente dify-api

  1. Escolha um dos seguintes métodos de integração com base no tipo de implantação da API do Dify:

    • Integração automática para containers Kubernetes (Recomendado): Para mais informações, consulte Install the Python agent for applications in an ACK cluster by using ack-onepilot. Adicione os seguintes rótulos ao Deployment do seu dify-api:

      labels:
        apsara.apm/application-type: Dify
        aliyun.com/app-language: python
        armsPilotAutoEnable: 'on'
        armsPilotCreateAppName: "deployment-name"    # The display name of the application in ARMS.
    • Obtenha o script de inicialização entrypoint.sh e faça as seguintes modificações:

      1. Adicione os seguintes comandos no início do script de inicialização para desinstalar plugins conflitantes e instalar o agente Python.

        python3 -m ensurepip --upgrade
        # Uninstall conflicting OTel plugins
        pip3 uninstall -y opentelemetry-instrumentation-celery \
         opentelemetry-instrumentation-flask \
         opentelemetry-instrumentation-redis \
         opentelemetry-instrumentation-requests \
         opentelemetry-instrumentation-logging \
         opentelemetry-instrumentation-wsgi \
         opentelemetry-instrumentation-fastapi \
         opentelemetry-instrumentation-asgi \
         opentelemetry-instrumentation-sqlalchemy
        # Install the Python agent
        pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && pip3 config set install.trusted-host mirrors.aliyun.com
        pip3 install aliyun-bootstrap && aliyun-bootstrap -a install
      2. Adicione o comando de inicialização aliyun-instrument ao final do script.

        # Start with aliyun-instrument
        exec aliyun-instrument gunicorn \
         --bind "${DIFY_BIND_ADDRESS:-0.0.0.0}:${DIFY_PORT:-5001}" \
         --workers ${SERVER_WORKER_AMOUNT:-1} \
         --worker-class ${SERVER_WORKER_CLASS:-gevent} \
         --worker-connections ${SERVER_WORKER_CONNECTIONS:-10} \
         --timeout ${GUNICORN_TIMEOUT:-200} \
         app:app
    • Configure as variáveis de ambiente.

      Parâmetro

      Valor de exemplo

      Descrição

      GEVENT_ENABLE

      true

      O Dify usa gevent. Defina esta variável como true.

      ARMS_APP_NAME

      dify-api

      Nome da aplicação.

      ARMS_REGION_ID

      cn-heyuan

      A região. Altere este valor para sua região alvo.

      ARMS_LICENSE_KEY

      xxx

      A License Key.

      APSARA_APM_APP_TYPE

      microservice

      Identifica a aplicação como um microsserviço.

2. Visualize os dados de monitoramento do componente dify-api. Na lista de aplicações, visualize a aplicação dify-api.

O trace exibe as chamadas upstream e downstream.

Etapa 2: Integrar aplicações de workflow do Dify

Dify API: 1.6.0 to 1.11.2

Dify API: Up to 1.6.0 or from 1.11.2

As aplicações de workflow do Dify não exigem configuração adicional. Após integrar o componente dify-api conforme descrito na etapa anterior, os dados de trace dos workflows são reportados e correlacionados automaticamente.

Dify API: 1.13.0 or later

Consulte Configurar OTel para Dify. Configure as variáveis de ambiente correspondentes no componente dify-worker. Para obter o endpoint do OTel, consulte Prerequisites.

Visualizar dados de monitoramento de aplicações de workflow

Exemplo de detalhes da aplicação:

A página de detalhes da aplicação oferece abas que incluem Overview, Performance Analysis, Token Analysis, LLM Operations, Provided Services, Dependent Services, Trace Analysis, Exception Analysis e Session Analysis. A página Overview exibe as seguintes métricas de monitoramento:

  • Cartões de estatísticas: Model Call Count, Token Usage, Trace Count, Span Count, Session Count, User Count com variações diárias

  • Gráfico de pizza Operation Type Distribution incluindo os tipos TASK, TOOL, CHAIN, LLM, RETRIEVER

  • Model Call Ranking (Top 5) e Request Count User Ranking (Top 5)

  • Gráfico de linha Session Count Trend

Exemplo de detalhes do trace: O trace coleta informações detalhadas sobre nós, como chamadas de LLM, recuperação e chamadas de ferramentas.

A página de detalhes do trace mostra um gráfico Trace waterfall à esquerda, com cada span anotado com tipo (TASK, TOOL, LLM, RETRIEVER), duração e contagem de tokens. A seção superior resume Trace ID, duração total, contagem de aplicações, contagem de interfaces e Total tokens. Ao clicar em um span, o painel de detalhes à direita exibe os metadados do span (Application Name, Interface Name, Hostname, spanId, hora de início/fim, etc.). Spans do tipo LLM também exibem o conteúdo do Prompt de entrada e das Mensagens de saída.

Etapa 3: Integrar o dify-plugin-daemon

  1. Modifique o Dockerfile e reconstrua a imagem. O exemplo a seguir mostra modificações no local.dockerfile:

    FROM golang:1.23-alpine AS builder
    
    ARG VERSION=unknown
    
    # copy project
    COPY . /app
    
    # set working directory
    WORKDIR /app
    
    # using goproxy if you have network issues
    # ENV GOPROXY=https://goproxy.cn,direct
    
    # download arms instgo
    RUN wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
    
    RUN chmod 777 instgo
    
    # instgo build
    RUN INSTGO_EXTRA_RULES="dify_python" ./instgo go build \
        -ldflags "\
        -X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.VersionX=${VERSION}' \
        -X 'github.com/langgenius/dify-plugin-daemon/internal/manifest.BuildTimeX=$(date -u +%Y-%m-%dT%H:%M:%S%z)'" \
        -o /app/main cmd/server/main.go
    
    # copy entrypoint.sh
    COPY entrypoint.sh /app/entrypoint.sh
    RUN chmod +x /app/entrypoint.sh
    
    FROM ubuntu:24.04
    
    WORKDIR /app
    
    # check build args
    ARG PLATFORM=local
    
    # Install python3.12 if PLATFORM is local
    RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl python3.12 python3.12-venv python3.12-dev python3-pip ffmpeg build-essential \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/* \
        && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1;
    
    # preload tiktoken
    ENV TIKTOKEN_CACHE_DIR=/app/.tiktoken
    
    # Install dify_plugin to speedup the environment setup, test uv and preload tiktoken
    RUN mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bk \
        && python3 -m pip install uv \
        && uv pip install --system dify_plugin \
        && python3 -c "from uv._find_uv import find_uv_bin;print(find_uv_bin());" \
        && python3 -c "import tiktoken; encodings = ['o200k_base', 'cl100k_base', 'p50k_base', 'r50k_base', 'p50k_edit', 'gpt2']; [tiktoken.get_encoding(encoding).special_tokens_set for encoding in encodings]"
    
    ENV UV_PATH=/usr/local/bin/uv
    ENV PLATFORM=$PLATFORM
    ENV GIN_MODE=release
    
    COPY --from=builder /app/main /app/entrypoint.sh /app/
    
    # run the server, using sh as the entrypoint to avoid process being the root process
    # and using bash to recycle resources
    CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]
    Nota

    A opção INSTGO_EXTRA_RULES ativa o monitoramento automático do runtime do plugin. Caso não deseje que o agente do plugin seja iniciado quando o plugin-daemon for executado, remova INSTGO_EXTRA_RULES="dify_python" do arquivo de build.

  2. Configure as variáveis de ambiente:

    • Ambiente ECS

      Parâmetro

      Valor de exemplo

      Descrição

      ARMS_LICENSE_KEY

      xxx@xxx

      A License Key.

      ARMS_REGION_ID

      cn-heyuan

      A região.

      ARMS_ENABLE

      true

      Ativa ou desativa o agente.

      ARMS_APP_NAME

      dify-plugin-daemon

      Nome da aplicação.

    • Ambiente containerizado com ack-onepilot: No arquivo de configuração YAML da aplicação dify-plugin-daemon, adicione os seguintes rótulos em spec.template.metadata.

      labels:
        aliyun.com/app-language: golang
        armsPilotAutoEnable: 'on'
        armsPilotCreateAppName: "dify-daemon-plugin"
  3. Implante e visualize os dados de monitoramento do dify-plugin-daemon. Na página Application List, acesse a aplicação dify-plugin-daemon.

    Após a integração bem-sucedida, visualize os seguintes dados de monitoramento na página Application Overview do console ARMS:

    • Cartões de métricas resumidas: Request Count, Error Count, Average Latency, Instance Count com variações diárias/semanais

    • Gráficos de séries temporais: Request Count/1m, Error Count/1m, Latency/1m (incluindo P99, P90, P75, Average), CPU Usage Peak

    • Rankings Top 5: Request Count ranking, Error Count ranking, Average Latency ranking, CPU Usage Peak Instance ranking

    As abas de navegação superior incluem Application Overview, Application Topology, Provided Services, Dependent Services, Trace Analysis, Instance Monitoring, Application Diagnostics, Scenario Analysis, Event Analysis, Application Configuration.

    Detalhes do trace:

    Selecione insight-agent-plugin-daemon no filtro serviceName para visualizar o trace distribuído completo das chamadas de requisição LLM do plugin. O gráfico Trace waterfall mostra múltiplos spans, incluindo:

    • Requisição de entrada GET

    • connect (conexões redis/sqlalchemy)

    • SELECT dify (consultas ao banco de dados)

    • /v1/sandbox/run (POST 200, execução sandbox, com chamadas multicamada httpx/go)

    • UPDATE dify (atualizações no banco de dados)

    As durações dos spans variam de 131µs a 34,95ms. O painel de detalhes do Span à direita mostra hostname, hora de início/fim, status e Attributes, incluindo net.protocol.name=HTTP, component.name, endpoint=/plugin/tenant_id/dispatch/llm/inv....

  4. Visualize os dados de monitoramento do plugin. Após a anexação do agente, o plugin-daemon inicia automaticamente o agente para o runtime do plugin. Cada runtime de plugin corresponde a uma aplicação observável com o nome {plugin_daemon_name}_plugin_{plugin_name}_{plugin_version}. Por exemplo, se o nome da aplicação do plugin-daemon for local-dify-plugin-daemon e a versão 0.0.53 do plugin tongyi estiver instalada, uma aplicação chamada local-dify-plugin-daemon_plugin_tongyi_0.0.53 será criada automaticamente.

(Opcional) Etapa 4: Monitorar o sandbox

O Sandbox é o motor de sandbox de código do Dify para executar códigos Python e Node.js a partir de um workflow. O agente Go suporta o monitoramento do sandbox. Para ativá-lo, modifique o Dockerfile, reconstrua a imagem e configure as variáveis de ambiente para habilitar o monitoramento.

  1. Modifique o Dockerfile e reconstrua a imagem correspondente. Edite o arquivo ./build/build_[amd64|arm64].sh.

    1. Adicione o comando para baixar o instgo. Abaixo está um comando de exemplo. Para comandos de download de outras regiões e arquiteturas, consulte Download instgo.

      wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
      chmod 777 instgo
    2. Adicione o comando instgo antes do comando go build. Segue um exemplo para amd64:

      rm -f internal/core/runner/python/python.so
      rm -f internal/core/runner/nodejs/nodejs.so
      rm -f /tmp/sandbox-python/python.so
      rm -f /tmp/sandbox-nodejs/nodejs.so
      wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
      chmod 777 instgo
      echo "Building Python lib"
      CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./instgo go build -o internal/core/runner/python/python.so -buildmode=c-shared -ldflags="-s -w" cmd/lib/python/main.go &&
      echo "Building Nodejs lib" &&
      CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./instgo go build -o internal/core/runner/nodejs/nodejs.so -buildmode=c-shared -ldflags="-s -w" cmd/lib/nodejs/main.go &&
      echo "Building main" &&
      GOOS=linux GOARCH=amd64 ./instgo go build -o main -ldflags="-s -w" cmd/server/main.go
      echo "Building env"
      GOOS=linux GOARCH=amd64 ./instgo go build -o env -ldflags="-s -w" cmd/dependencies/init.go
      
  2. Configure as variáveis de ambiente.

    • Integração via containers Kubernetes: No arquivo de configuração YAML da aplicação dify-plugin-daemon, adicione os seguintes rótulos em spec.template.metadata.

      labels:
        aliyun.com/app-language: golang
        armsPilotAutoEnable: 'on'
        armsPilotCreateAppName: "dify-daemon-plugin"
      
    • Integração manual:

      Parâmetro

      Valor de exemplo

      Descrição

      ARMS_LICENSE_KEY

      xxx

      A License Key.

      ARMS_REGION_ID

      cn-heyuan

      A região.

      ARMS_ENABLE

      true

      Ativa ou desativa o agente.

      ARMS_APP_NAME

      dify-plugin-daemon

      Nome da aplicação.

  3. Implante e visualize os dados de monitoramento do sandbox. Na página Application List, acesse a aplicação dify-sandbox. Os detalhes do monitoramento são os seguintes: image

    Detalhes do trace:

    Este Trace tem uma duração total de 8,7s, envolvendo 5 aplicações e 1039 interfaces. A página indica Exception Detected. As chamadas de componentes incluem redis 575 vezes, sqlalchemy 337 vezes, httpx 14 vezes, etc. O caminho principal no gráfico Span waterfall mostra consultas SELECT dify seguidas por chamadas multicamada /v1/sandbox/run (POST httpx 35,96ms → SERVER go 28,39ms → chamadas INTERNAL go multinível). Os detalhes do span mostram o nome da aplicação insight-agent-sandbox, interface /v1/sandbox/run, hostname sandbox-7489d68cd5-xcqv8, com código de status normal.

(Opcional) Etapa 5: Monitorar o gateway de entrada Nginx

O Nginx atua como gateway de entrada para o Dify. Alguns problemas relacionados a timeouts ou uploads de arquivos para a base de conhecimento, plugins ou workflows podem estar ligados à configuração do Nginx. Reporte dados usando OpenTelemetry, conforme descrito em Trace Nginx by using OpenTelemetry.

Configuração

Coleta de conteúdo de entrada e saída

Padrão: True.

Efeito quando desativado: Quando um usuário envia uma consulta, o agente coleta apenas o tamanho de campos como entrada e saída para modelos, ferramentas e base de conhecimento, mas não o conteúdo desses campos.

Configuração: Defina a variável de ambiente OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=False.

Divisão de aplicações LLM

Padrão: False.

Efeito quando ativado: Os dados reportados são divididos em subaplicações LLM. Cada aplicação LLM, como um workflow, Agent ou Chat App do Dify, corresponde a uma aplicação ARMS separada.

Configuração: Defina a variável de ambiente PROFILER_GENAI_SPLITAPP_ENABLE=True.

Regiões suportadas: China (Heyuan) e Singapore.

Limite de comprimento do conteúdo da mensagem

Padrão: 4K caracteres.

Efeito quando ativado: Limita o comprimento do conteúdo de cada mensagem LLM, como os campos de mensagem de entrada/saída. O agente trunca o conteúdo da mensagem que exceder o comprimento de caracteres especificado.

Plugins suportados: Esta configuração aplica-se apenas ao Dify e LangChain.

Configuração: Se a versão do seu agente for 1.8.3 ou posterior, defina a variável de ambiente OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_MAX_LENGTH=<integer_value>. Substitua <integer_value> por um número inteiro que especifique o comprimento máximo de caracteres.

Limite de comprimento do valor do atributo Span

Padrão: Sem limite.

Efeito quando ativado: Limita o comprimento dos valores de atributos Span reportados, como gen_ai.agent.description. O agente trunca os valores de atributos que excederem o comprimento de caracteres especificado.

Plugins suportados: Esta configuração aplica-se a todos os plugins que suportam OpenTelemetry, como LangChain, DashScope e Dify.

Configuração: Defina a variável de ambiente OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT=<integer_value>. Substitua <integer_value> por um número inteiro que especifique o comprimento máximo de caracteres.