微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

跨度传播开放遥测的问题

如何解决跨度传播开放遥测的问题

我有四个微服务,其中一个是应用协调器,它负责请求其他服务。我正在使用 docker-compose 来构建所有服务,例如ELK、Jaeger 和微服务。这个想法是每个微服务都可以自己跨,但只有应用程序协调器正确跨,其他跨不写Jaeger。如果我不使用 docker 启动每个服务,直接启动,一切正常。

With Python 3.7x

Docker-compose

version: '3.7'

services:
  gather_hr:
      container_name: gather_hr-app
      build:
          context: gather_hr/.
      depends_on:
        - jaeger
      volumes:
          - ./gather_hr/gather_hr/input:/input
      ports:
          - "5001:5001"
      environment:
          - WEB_PORT=5001
          - INPUT_DIR=/input
        
  process_payroll:
      container_name: process_payroll-app
      build:
          context: process_payroll/.
      depends_on:
        - jaeger
      ports:
          - "5002:5002"
      environment:
          - WEB_PORT=5002

  generate_payslip:
      container_name: generate_payslip-app
      build:
          context: generate_payslip/.
      depends_on:
        - jaeger
      volumes:
          - ./generate_payslip/generate_payslip/output:/output
      ports:
          - "5003:5003"
      environment:
          - WEB_PORT=5003
          - OUTPUT_DIR=/output/


  jaeger:
    image: "jaegertracing/all-in-one:1.22.0"
    ports:
      - "5775:5775/udp"
      - "5778:5778"
      - "6831:6831/udp"
      - "6832:6832/udp"
      - "9411:9411"
      - "14268:14268"
      - "16686:16686"
      - "16687:16687"
    environment:
      SPAN_STORAGE_TYPE: "elasticsearch"
      ES_SERVER_URLS: "http://elasticsearch:9200"
      ES_TAGS_AS_FIELDS: "true"
    depends_on:
      - elasticsearch
    healthcheck:
      test: ["CMD","curl","-f","http://localhost:16687/"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s
    restart: on-failure

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.1
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-xms512m -Xmx512m"
    ports:
      - 9200:9200
    ulimits:
      memlock:
        soft: -1
        hard: -1

  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.1
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch

应用协调器的设置 导入日志 导入操作系统

from opentelemetry import trace
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
from opentelemetry.sdk.resources import SERVICE_NAME,Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor


def server_configuration():
    config = {}
    # microservices
    config["url_api_hr_data"] = os.environ.get("URL_API_HR_DATA",'http://localhost:5001/api/employee/') 
    config["url_api_process"] = os.environ.get("URL_API_PROCESS",'http://localhost:5002/api/payroll/')
    config["url_api_payslip"] = os.environ.get("URL_API_PAYSLIP",'http://localhost:5003/api/payslip/')
    # payslips output
    config["output_dir"] = os.environ.get("OUTPUT_DIR","./output/")
    # connection handle
    config["no_cache"] = False
    config["max_retries"] = os.environ.get("MAX_RETRIES",10)
    # config["retry_delay"] = os.environ.get("RETRY_DELAY",1)
    return config
system_config = server_configuration()

trace.set_tracer_provider(
    TracerProvider(
        resource=Resource.create({SERVICE_NAME: "appcoordinator"})
    )
)

jaeger_exporter = JaegerExporter(agent_host_name="localhost",agent_port=6831,)

trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(jaeger_exporter)
)


logging.basicConfig(
    format=("%(asctime)s,%(msecs)-3d - %(levelname)-8s => %(message)s"),# - %(name)-12s
    datefmt="%Y-%m-%d %H:%M:%s",level=logging.DEBUG
)
logger = logging.getLogger(__name__)
tracer = trace.get_tracer(__name__)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。