学习使用Opentelemetry python SDK

2024-06-06 16:20

本文主要是介绍学习使用Opentelemetry python SDK,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

📢博客主页:程序源⠀-CSDN博客
📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!

一、什么是 OpenTelemetry

OpenTelemetry 由 OpenTracing 和 OpenCensus 项目合并而成,是一组规范、工具、API 和 SDK 的集合。使用它来检测、生成、收集和导出遥测数据(Metrics、Logs 和 Traces),以帮助运维开发人员分析软件的性能和行为。为众多开发人员带来 Metrics、Traces、Logs 的统一标准,三者都有相同的元数据结构,可以轻松实现互相关联。

OpenTelemetry 是一个CNCF 孵化项目。OpenTelemetry 与厂商、平台无关,不提供与可观测性相关的后端服务。可根据用户需求将可观测类数据导出到存储、查询、可视化等不同后端,如 Prometheus、Jaeger 、云厂商服务中。

二、OpenTelemetry 诞生背景、主要特点和功能等相关介绍

参考如下文章:
http://t.csdnimg.cn/cKO5L

http://t.csdnimg.cn/SJK3k

三、使用Opentelemetry python SDK(以Windows为例)

3.1 环境准备

确保电脑上已经安装了Python

3.2 创建工程激活虚拟环境

在一个新目录中打开命令行

执行如下操作:
 

mkdir otel-getting-started
cd otel-getting-started
python3 -m venv venv
.\venv\Scripts\activate

3.3 安装框架和依赖

pip install flask

pip install opentelemetry-distre

opentelemetry-bootstrap-a install

 3.4 创建并启动HTTP服务器

 

目录下新建app.py文件(使用软件为PyCharm),编写代码如下:

from random import randint
from flask import Flask, request
import loggingapp = Flask(__name__)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)@app.route("/rolldice")
def roll_dice():player = request.args.get('player', default=None, type=str)result = str(roll())if player:logger.warning("%s is rolling the dice: %s", player, result)else:logger.warning("Anonymous player is rolling the dice: %s", result)return resultdef roll():return randint(1, 6)

 在终端中打开目录,启动服务。

 设置环境变量

 $env:OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED="true"

 设置 FLASK_APP 环境变量

 $env:FLASK_APP="app.py"

3.5 执行结果

执行如下代码

opentelemetry-instrument `--traces_exporter console `--metrics_exporter console `--logs_exporter console `--service_name dice-server `flask run -p 8080

访问对应的地址:http://127.0.0.1:8080/rolldice
显示如下:

最后会在控制台中看见span会打印出来

四、配置和运行本地 OpenTelemetry Collector

首先确保电脑上有安装Docker,我的Windows使用的是Docker Desktop

目录结构如下:

在venv目录下新建docker-compose.yal、Dockerfile、otel-collector-config.yaml以及requirements.txt文件

配置并运行本地收集器

otel-collector-config.yaml文件

receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318
exporters:logging:logLevel: debug
processors:batch:
service:pipelines:traces:receivers: [otlp]exporters: [logging]processors: [batch]metrics:receivers: [otlp]exporters: [logging]processors: [batch]logs:receivers: [otlp]exporters: [logging]processors: [batch]

requirements.txt文件

Flask==2.2.3
opentelemetry-api==1.16.0
opentelemetry-sdk==1.16.0
opentelemetry-exporter-otlp==1.16.0
opentelemetry-instrumentation-flask==0.37b0
opentelemetry-semantic-conventions==0.37b0
Werkzeug==2.2.3
Jinja2==3.1.2
click==8.1.3
itsdangerous==2.1.2
importlib-metadata==4.8.3
Deprecated==1.2.13
typing-extensions==4.12.1

Dockerfile文件

# 使用 Python 官方镜像作为基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 将 requirements.txt 复制到工作目录
COPY requirements.txt .# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt# 将当前目录的内容复制到工作目录
COPY . .# 设置环境变量以启用自动化日志记录
ENV OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true# 暴露应用运行的端口
EXPOSE 8080# 启动 Flask 应用
CMD ["opentelemetry-instrument", "--logs_exporter", "otlp", "flask", "run", "-p", "8080"]

安装 OTLP 导出程序包

pip install opentelemetry-exporter-otlp

运行应用程序

docker-compose up --build

由于我们配置了 logging 导出器,可以通过查看 OpenTelemetry Collector 容器的日志来检查跟踪和日志记录数据。

docker-compose logs otel-collector

这篇关于学习使用Opentelemetry python SDK的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036616

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J