open-telemetry / opentelemetry-python

OpenTelemetry Python API and SDK
https://opentelemetry.io
Apache License 2.0
1.74k stars 610 forks source link

AttributeError #2854

Closed iomari closed 2 years ago

iomari commented 2 years ago

Greetings, Help! metrics.get_meter_provider().start_pipeline(meter, exporter, 5) not present.

example came from this site: https://open-telemetry.github.io/opentelemetry-python/exporter/prometheus/prometheus.html


> python3 ./prometheus.py  
Traceback (most recent call last):
  File "/temp/opentelemetry/starting over/./prometheus.py", line 21, in <module>
    metrics.get_meter_provider().start_pipeline(meter, exporter, 5)
AttributeError: '_ProxyMeterProvider' object has no attribute 'start_pipeline'

code:

from opentelemetry import metrics
from opentelemetry.exporter.prometheus import PrometheusMetricReader
from opentelemetry.sdk.metrics import Counter, Meter
from prometheus_client import start_http_server
from time import sleep

from opentelemetry.sdk.resources import SERVICE_NAME, Resource
resource = Resource(attributes={SERVICE_NAME: "inspired_prometheus"})

# Start Prometheus client
start_http_server(port=8000, addr="localhost")

# Meter is responsible for creating and recording metrics
# metrics.set_meter_provider(MeterProvider())
meter = metrics.get_meter(__name__)
# exporter to export metrics to Prometheus
prefix = "MyAppPrefix"
exporter = PrometheusMetricReader(prefix)
# Starts the collect/export pipeline for metrics
metrics.get_meter_provider().start_pipeline(meter, exporter, 5)

counter = meter.create_counter(
    "requests",
    "number of requests",
    "requests",
    int,
    ("environment",),
)

# Labels are used to identify key-values that are associated with a specific
# metric that you want to record. These are useful for pre-aggregation and can
# be used to store custom dimensions pertaining to a metric
labels = {"environment": "staging"}

while True:
    cnt = randint(1,100)
    counter.add(cnt, labels)
    sleep(1)
input("Press any key to exit...")

modules:

asgiref==3.5.2
asttokens==2.0.5
backcall==0.2.0
backoff==2.1.2
certifi==2022.6.15
charset-normalizer==2.1.0
click==8.1.3
colorama==0.4.5
colorclass==2.2.2
decorator==5.1.1
Deprecated==1.2.13
docopt==0.6.2
executing==0.9.1
Flask==2.1.3
googleapis-common-protos==1.56.2
grpcio==1.48.0
idna==3.3
ipython==8.4.0
itsdangerous==2.1.2
jedi==0.18.1
Jinja2==3.1.2
MarkupSafe==2.1.1
matplotlib-inline==0.1.3
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_api&subdirectory=opentelemetry-api
opentelemetry-distro==0.32b0
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_exporter_jaeger&subdirectory=exporter/opentelemetry-exporter-jaeger
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_exporter_jaeger_proto_grpc&subdirectory=exporter/opentelemetry-exporter-jaeger-proto-grpc
opentelemetry-exporter-jaeger-thrift==1.12.0rc2
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_exporter_otlp&subdirectory=exporter/opentelemetry-exporter-otlp
opentelemetry-exporter-otlp-proto-grpc==1.12.0rc2
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_exporter_otlp_proto_http&subdirectory=exporter/opentelemetry-exporter-otlp-proto-http
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_exporter_prometheus&subdirectory=exporter/opentelemetry-exporter-prometheus
opentelemetry-instrumentation==0.32b0
opentelemetry-instrumentation-asgi==0.32b0
opentelemetry-instrumentation-aws-lambda==0.32b0
opentelemetry-instrumentation-dbapi==0.32b0
-e git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@fbac4245159e51877efa86581724995bd1415a18#egg=opentelemetry_instrumentation_django&subdirectory=instrumentation/opentelemetry-instrumentation-django
opentelemetry-instrumentation-fastapi==0.32b0
opentelemetry-instrumentation-flask==0.32b0
opentelemetry-instrumentation-grpc==0.32b0
opentelemetry-instrumentation-jinja2==0.32b0
opentelemetry-instrumentation-logging==0.32b0
opentelemetry-instrumentation-requests==0.32b0
opentelemetry-instrumentation-sqlite3==0.32b0
opentelemetry-instrumentation-urllib==0.32b0
opentelemetry-instrumentation-urllib3==0.32b0
opentelemetry-instrumentation-wsgi==0.32b0
opentelemetry-propagator-aws-xray==1.0.1
opentelemetry-proto==1.12.0rc2
-e git+https://github.com/open-telemetry/opentelemetry-python.git@43288ca9a36144668797c11ca2654836ec8b5e99#egg=opentelemetry_sdk&subdirectory=opentelemetry-sdk
opentelemetry-semantic-conventions==0.32b0
opentelemetry-util-http==0.32b0
packaging==21.3
parso==0.8.3
pexpect==4.8.0
pickleshare==0.7.5
pip-upgrader==1.4.15
prometheus-client==0.14.1
prompt-toolkit==3.0.30
protobuf==3.20.1
ptyprocess==0.7.0
pure-eval==0.2.2
Pygments==2.12.0
pyparsing==3.0.9
requests==2.28.1
six==1.16.0
sqlparse==0.4.2
stack-data==0.3.0
termcolor==1.1.0
terminaltables==3.1.10
thrift==0.16.0
traitlets==5.3.0
typing_extensions==4.3.0
urllib3==1.26.11
wcwidth==0.2.5
Werkzeug==2.2.1
wrapt==1.14.1
srikanthccv commented 2 years ago

The official docs is here https://opentelemetry-python.readthedocs.io/en/latest/, Please follow that and use examples from here https://github.com/open-telemetry/opentelemetry-python/tree/main/docs/examples. Linked docs by you is old and shouldn't exist (we will fix this).

iomari commented 2 years ago

thank you

iomari commented 2 years ago

Sorry, just checked the example folder and there's no example for prometheus. DO you know where I can find one that's up to date?

srikanthccv commented 2 years ago

https://opentelemetry.io/docs/instrumentation/python/exporters/#prometheus

iomari commented 2 years ago

Thank you

chandan-srm commented 1 year ago

metrics.get_meter_provider().start_pipeline(meter, exporter, push_interval) AttributeError: 'MeterProvider' object has no attribute 'start_pipeline' ERROR: Command failed.

matejsp commented 1 year ago

This is a bit different use case for prometheus: pull (local http server) vs push (remote write).

I got remote write working using:

# Service name is required for most backends
resource = Resource(attributes={
    SERVICE_NAME: "myservice"
})

exporter = PrometheusRemoteWriteMetricsExporter(
    endpoint="http://localhost:8428/api/v1/write",
    # headers={..},
)

reader = PeriodicExportingMetricReader(exporter)
provider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(provider)