昨天我們使用了flask和opentelemetry結合,今天我們來嘗試加上DB以及jaeger。題外話jaeger是一個德文名字,為什麼會知道呢?是因為之前有玩Rainbow Six:Seige。
至於怎麼發音則接近"耶格",或者可以用google查一下jaeger pronunciation就可以知道怎麼念了
扯遠了,我們回來看一下要怎麼使用opentelemetry來做sqlite和jaeger的結合。
首先上code
import sqlite3
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
from opentelemetry.instrumentation.sqlite3 import SQLite3Instrumentor
from random import randint
from flask import Flask, request
resource = Resource(attributes={
SERVICE_NAME: "ithome-roll-dice"
})
jaeger_exporter = JaegerExporter(
agent_host_name="localhost",
agent_port=6831,
)
SQLite3Instrumentor().instrument()
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(jaeger_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(__name__)
app = Flask(__name__)
@app.route("/roll")
def roll():
with tracer.start_as_current_span(
"server_request",
attributes={"endpoint": "/roll"}
):
sides = int(request.args.get('sides'))
rolls = int(request.args.get('rolls'))
insert_sqlite(sides, rolls)
return roll_sum(sides, rolls)
def insert_sqlite(sides, rolls):
cnx = sqlite3.connect('example.db')
cursor = cnx.cursor()
cursor.execute("INSERT INTO test (testField) VALUES (123)")
cursor.close()
cnx.close()
def roll_sum(sides, rolls):
span = trace.get_current_span()
sum = 0
for r in range(0, rolls):
result = randint(1, sides)
span.add_event("log", {
"roll.sides": sides,
"roll.result": result,
})
sum += result
return str(sum)
roll dice的部分大致跟昨天一樣,比較不同的是我們天用的是console exporter今天換為jaeger exporter
然後我們要啟用jaeger的container。
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
之後我們run flask app
flask run
然後就可以用curl去下roll dice
接下來我們可以就可以去jaeger的UI中看看
輸入http://localhost:16686
然後就可以看到jaeger的畫面
今天比較沒時間,公司的一堆事要忙。
沒太多說明,之後有機會再回來修,有問題也可以留言發問。