iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
DevOps

從零開始的Kubernetes轉換系列 第 23

Day 23 OpenTelemetry(三)

  • 分享至 

  • xImage
  •  

昨天我們使用了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的畫面


今天比較沒時間,公司的一堆事要忙。
沒太多說明,之後有機會再回來修,有問題也可以留言發問。


上一篇
Day 22 OpenTelemetry(二)
下一篇
Day 24 Jaeger, Zipkin, Signoz
系列文
從零開始的Kubernetes轉換30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言