如何解决跨度传播开放遥测的问题
我有四个微服务,其中一个是应用协调器,它负责请求其他服务。我正在使用 docker-compose 来构建所有服务,例如ELK、Jaeger 和微服务。这个想法是每个微服务都可以自己跨,但只有应用程序协调器正确跨,其他跨不写Jaeger。如果我不使用 docker 启动每个服务,直接启动,一切正常。
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 举报,一经查实,本站将立刻删除。