日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過(guò)OpenTelemetry上報(bào)Ruby應(yīng)用數(shù)據(jù)

通過(guò)OpenTelemetry為應(yīng)用埋點(diǎn)并上報(bào)鏈路數(shù)據(jù)至可觀測(cè)鏈路 OpenTelemetry 版后,可觀測(cè)鏈路 OpenTelemetry 版即可開(kāi)始監(jiān)控應(yīng)用,您可以查看應(yīng)用拓?fù)?、調(diào)用鏈路、異常事務(wù)、慢事務(wù)和SQL分析等一系列監(jiān)控?cái)?shù)據(jù)。本文介紹如何使用OpenTelemetry為Ruby應(yīng)用埋點(diǎn)并上報(bào)數(shù)據(jù)。

前提條件

獲取接入點(diǎn)信息

  1. 登錄ARMS控制臺(tái),在左側(cè)導(dǎo)航欄單擊接入中心。

  2. 服務(wù)端應(yīng)用區(qū)域單擊OpenTelemetry卡片。

  3. 在彈出的OpenTelemetry面板中選擇數(shù)據(jù)需要上報(bào)的地域。

    說(shuō)明

    初次接入的地域?qū)?huì)自動(dòng)進(jìn)行資源初始化。

  4. 選擇連接方式上報(bào)方式,然后復(fù)制接入點(diǎn)信息。

    • 連接方式:若您的服務(wù)部署在阿里云上,且所屬地域與選擇的接入地域一致,推薦使用阿里云內(nèi)網(wǎng)方式,否則選擇公網(wǎng)方式。

    • 上報(bào)方式:根據(jù)客戶端支持的協(xié)議類型選擇HTTP或gRPC協(xié)議上報(bào)數(shù)據(jù)。

    image.png

背景信息

  • Ruby版本限制:MRI Ruby ≥ 3.0,jruby ≥ 9.3.2.0,或者truffleruby ≥ 22.1。

  • OpenTelemetry Ruby支持手動(dòng)埋點(diǎn)和半自動(dòng)埋點(diǎn)(無(wú)需手動(dòng)創(chuàng)建Span,但需添加一個(gè)配置文件),其中半自動(dòng)埋點(diǎn)支持的框架請(qǐng)參見(jiàn)OpenTelemetry官方文檔。

展開(kāi)查看支持的Ruby框架

  • action_pack

  • action_view

  • active_job

  • active_model_serializers

  • active_record

  • active_support

  • aws_sdk

  • bunny

  • concurrent_ruby

  • dalli

  • delayed_job

  • ethon

  • excon

  • faraday

  • grape

  • graphql

  • gruf

  • http

  • http_client

  • httpx

  • koala

  • lmdb

  • mongo

  • mysql2

  • net_http

  • pg

  • que

  • racecar

  • rack

  • rails

  • rake

  • rdkafka

  • redis

  • resque

  • restclient

  • rspec

  • ruby_kafka

  • sidekiq

  • sinatra

  • trilogy

示例Demo

示例代碼倉(cāng)庫(kù)地址:ruby-opentelemetry-demo

方法一:使用HTTP協(xié)議上報(bào)數(shù)據(jù)

  1. 安裝手動(dòng)埋點(diǎn)所需的OpenTelemetry相關(guān)依賴。

    gem install opentelemetry-api
    gem install opentelemetry-sdk
    gem install opentelemetry-exporter-otlp
  2. OpenTelemetry初始化。

    添加導(dǎo)出觀測(cè)數(shù)據(jù)的組件,將<endpoint>替換成前提條件中獲取的對(duì)應(yīng)地域的Endpoint。

    require 'opentelemetry/sdk'
    require 'opentelemetry-exporter-otlp'
    
    OpenTelemetry::SDK.configure do |c|
      c.add_span_processor(
        OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
          OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint: '<endpoint>' # HTTP方式接入
          )
        )
      )
      c.resource = OpenTelemetry::SDK::Resources::Resource.create({
        OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'tracing',
        OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'ruby_demo', # 通過(guò)OpenTelemetry上報(bào)的Ruby應(yīng)用名
        OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => '0.0.1',
      })
    end
  3. 獲取Tracer并創(chuàng)建新的Span。

    tracer = OpenTelemetry.tracer_provider.tracer('<your_tracer_name>', '0.1.0')
    
    tracer.in_span('parent_span') do |parent_span|
      # ...
    end
  4. 獲取當(dāng)前Span,向當(dāng)前Span添加信息并獲取Trace ID和Span ID。

    # ...
    tracer.in_span('parent_span') do |parent_span|
      # current_span即parent_span
      current_span = OpenTelemetry::Trace::current_span
      current_span.set_attribute('key', 'value')
      pp current_span.context.trace_id
      pp current_span.context.span_id
    end
  5. 創(chuàng)建嵌套的Span。

    # ...
    tracer.in_span('parent_span') do |parent_span|
      # ...
      tracer.in_span('child_span') do |child_span|
        # 此時(shí)current_span是child_span
        current_span = OpenTelemetry::Trace::current_span
        pp current_span
      end
    end

    展開(kāi)查看完整代碼

    require 'opentelemetry/sdk'
    require 'opentelemetry-exporter-otlp'
    
    OpenTelemetry::SDK.configure do |c|
      c.add_span_processor(
        OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
          OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint: '<endpoint>' # HTTP方式接入
          )
        )
      )
      c.resource = OpenTelemetry::SDK::Resources::Resource.create({
        OpenTelemetry::SemanticConventions::Resource::SERVICE_NAMESPACE => 'tracing',
        OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => 'ruby_demo', # 通過(guò)OpenTelemetry上報(bào)的Ruby應(yīng)用名
        OpenTelemetry::SemanticConventions::Resource::SERVICE_VERSION => '0.0.1',
      })
    
      # 不使用OpenTelemetry Resources API來(lái)設(shè)置應(yīng)用名
      # c.service_name = 'ruby_demo'
    end
    
    tracer = OpenTelemetry.tracer_provider.tracer('instrumentation_library_name', '0.1.0')
    
    tracer.in_span('parent_span') do |parent_span|
      # 設(shè)置Attribute
      parent_span.set_attribute('language', 'ruby')
      parent_span.set_attribute("attribute_key", ["attribute_value1", "attribute_value1", "attribute_value1"])
      # 添加Event
      parent_span.add_event("event", attributes: {
        "pid" => 1234,
        "signal" => "SIGHUP"
      })
    
      # 獲取Trace ID與當(dāng)前Span的Span ID
      current_span = OpenTelemetry::Trace::current_span
      pp current_span.context.trace_id
      pp current_span.context.span_id
    
      tracer.in_span('child_span') do |child_span|
        child_span.add_attributes({
          "key1" => "value1",
          "key2" => "value2"
        })
    
        child_span.add_event("mock exception here")
    
        begin
          raise 'An error has occurred'
        rescue
          # 發(fā)生異常時(shí),將child_span的status設(shè)置為error
          child_span.status = OpenTelemetry::Trace::Status.error("error in child span")
        end
    
        pp child_span
    
      end
    end
    
    sleep 10
  6. 運(yùn)行程序。

    ruby manual.rb

方法二:自動(dòng)上報(bào)

OpenTelemetry Ruby也可以自動(dòng)在應(yīng)用程序中埋點(diǎn),實(shí)現(xiàn)自動(dòng)觀測(cè)。下面以基于Rails框架的Ruby Web應(yīng)用為例,演示使用OpenTelemetry自動(dòng)追蹤鏈路并上報(bào)數(shù)據(jù)。

  1. 下載開(kāi)源Web應(yīng)用框架Rails。

    gem install rails
  2. 使用Rails創(chuàng)建Web項(xiàng)目。

    rails new <your-project-name>
    • 請(qǐng)將<your-project-name>替換為應(yīng)用名,例如:rails new auto-demo

    • 如果運(yùn)行命令后出現(xiàn)Rails is not currently installed on this system.的報(bào)錯(cuò),請(qǐng)關(guān)閉終端并重新打開(kāi),然后在新打開(kāi)的終端中重新輸入命令。

  3. 在應(yīng)用目錄下的Gemfile文件中添加以下內(nèi)容。

    gem 'opentelemetry-sdk'
    gem 'opentelemetry-exporter-otlp'
    gem 'opentelemetry-instrumentation-all'
  4. 下載此Web應(yīng)用所需的第三方依賴。

    1. 進(jìn)入項(xiàng)目根目錄。

      cd <your-project-name>
    2. 下載Ruby依賴管理工具Bundler。

      gem install bundler
    3. 下載Gemfile中的依賴。

      bundle install
  5. <your-project-name>/config/initializers目錄下創(chuàng)建opentelemetry.rb文件,并添加以下內(nèi)容。

    # config/initializers/opentelemetry.rb
    require 'opentelemetry/sdk'
    require 'opentelemetry/exporter/otlp'
    require 'opentelemetry/instrumentation/all'
    
    OpenTelemetry::SDK.configure do |c|
      c.add_span_processor(
        OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
          OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint: '<endpoint>' # HTTP方式接入
          )
        )
      )
      c.resource = OpenTelemetry::SDK::Resources::Resource.create({
        OpenTelemetry::SemanticConventions::Resource::HOST_NAME => '<your-host-name>', # 主機(jī)名
      })
      c.service_name = '<your-service-name>'    # 服務(wù)名
      c.use_all()    # 自動(dòng)觀測(cè)opentelemetry支持的所有庫(kù),
    end
    • <endpoint>替換成前提條件中獲取的對(duì)應(yīng)地域的Endpoint。

    • 根據(jù)實(shí)際情況替換<your-host-name><your-service-name>。

  6. 運(yùn)行項(xiàng)目。

    rails server

    如果輸出以下內(nèi)容,則表示運(yùn)行成功。

    * Puma version: 5.6.5 (ruby 2.7.2-p137) ("Birdie's Version")
    *  Min threads: 5
    *  Max threads: 5
    *  Environment: development
    *          PID: 79842
    * Listening on http://127.0.0.1:3000
    * Listening on http://[::1]:3000
    Use Ctrl-C to stop
  7. 在瀏覽器中訪問(wèn)http://127.0.0.1:3000,終端輸出以下內(nèi)容則說(shuō)明數(shù)據(jù)已上報(bào)至可觀測(cè)鏈路 OpenTelemetry 版控制臺(tái)。

    Started GET "/" for 127.0.0.1 at 2023-01-01 10:00:00 +0800
    Processing by Rails::WelcomeController#index as HTML
      Rendering /Users/username/.rvm/gems/ruby-2.7.2/gems/railties-7.0.4.3/lib/rails/templates/rails/welcome/index.html.erb
      Rendered /Users/username/.rvm/gems/ruby-2.7.2/gems/railties-7.0.4.3/lib/rails/templates/rails/welcome/index.html.erb (Duration: 0.8ms | Allocations: 665)
    Completed 200 OK in 6ms (Views: 2.1ms | ActiveRecord: 0.0ms | Allocations: 5440)

查看監(jiān)控?cái)?shù)據(jù)

登錄ARMS控制臺(tái)后,在應(yīng)用監(jiān)控 > 應(yīng)用列表頁(yè)面選擇目標(biāo)應(yīng)用,查看鏈路數(shù)據(jù)。

說(shuō)明

語(yǔ)言列顯示image圖標(biāo)的應(yīng)用為接入應(yīng)用監(jiān)控的應(yīng)用,顯示-圖標(biāo)的應(yīng)用為接入可觀測(cè)鏈路 OpenTelemetry 版的應(yīng)用。