Ruby Tracing SDK

Instana ile izleme otomatidir, ancak özel kod, belirli bir uygulama alanı ya da şirket içi bileşen için daha fazla görünürlük bile isterseniz, Instana 'nın Ruby Tracing SDK ' yı aşağıdaki gibi ayrıntılı şekilde kullanabilirsiniz.

Instana Ruby Tracing SDK

Instana Ruby gem, uygulamanızın herhangi bir yerinde herhangi bir bölümünü izlemek için kullanımı kolay API ' yı sağlar.

Kodun bir bölümüne bir bölüm eklemek için, aşağıdaki gibi bir işlem yapılabilir:

begin
  ::Instana.tracer.log_entry(:mywork, { :helpful_kvs => @user.id })
  # The code to be instrumented
  @id = User.find_by_name('john.smith')
rescue => e
  ::Instana.tracer.log_error(e)
ensure
  ::Instana.tracer.log_exit(:mywork, { :found_id => @id })
end

Ya da diğer bir seçenek olarak, yükseltilmiş kural dışı durumları otomatikleştirecek ve günlüğe kaydedecek trace blok yöntemini kullanabilirsiniz:

::Instana.tracer.trace(:mywork, { :helpful_kvs => @user.id }) do
  # The code to be instrumented
  @id = User.find_by_name('john.smith')
 end

Yukarıdaki basit örneklerdir, ancak istediğiniz herhangi bir isteğe bağlı kod parçasının ne kadar kolay bir kod parçası olduğunu göstermekte.

Zamanuyumsuz İzlemesi

İzlemek istediğiniz bazı işlemler, hemen dönebildikleri ancak yine de grup dışında çalışmaya devam edebilecekleri zamanuyumsuz bir anlam olabilir. Bunu yapmak için, log_async_* ile ilgili izleme yöntemlerini kullanabilirsiniz:

::Instana.tracer.log_entry(:prep_job, { :helpful_kvs => @job.name })

http_ops = {:get => "/", :post => "/post_data"}

cb_block = Proc.new do |response, payload|
  # The callback block that is invoked on HTTP response (payload == t_context)
  #
  # process response
  #
  ::Instana.tracer.log_async_exit(:http_op, :status => response.status, payload)
end

http_ops.each do |op|
  t_context = ::Instana.tracer.log_async_entry(:http_op)

  # Example op that returns immediately
  request_id = connection.async_request(op, cb_block, t_context)

  ::Instana.tracer.log_async_info({:request_id => request_id}, t_context)
end  

İçeriği Yeni İş Parçacıklarına Taşımak

İzleme iş parçacığı yereldir. Yeni bir iş parçacığı yumurtladığınızda, bağlam yeni iş parçacığa taşınmalı ve daha sonra bu iş parçacığa taşınmalıdır.

# Get the tracing context
t_context = ::Instana.tracer.context

# Spawn new thread
Thread.new do
  # Pickup context in this thread with `t_context`
  ::Instana.tracer.log_start_or_continue(:async_thread, { :async_start => 1 }, t_context)

  # Continue tracing work as usual
  begin
    ::Instana.tracer.log_entry(:mywork, { :helpful_kvs => @user.id })
    # The code to be instrumented
    @id = User.find_by_name('john.smith')
  rescue => e
    ::Instana.tracer.log_error(e)
  ensure
    ::Instana.tracer.log_exit(:mywork, { :found_id => @id })
  end
end

Daha Sonra İçin Zamanlanan İzleme İşleri

Daha sonra çalıştırılacak kuyruğa yollanan işler aşağıdaki gibi özel işlemden geçirilebilir:

::Instana.tracer.log_entry(:prep_job, { :job_name => @job.name })

# Get the current tracing context
t_context = ::Instana.tracer.context

# The Async proc (job) that will be executed out of band.
block = Proc.new do
  # This will pickup context and link the two traces (root + job)
  t_context = ::Instana.tracer.log_start_or_continue_trace(:my_async_op, { :helpful_kvs => true }, t_context)
  #
  # Some Asynchronous work to be done
  #
  ::Instana.tracer.log_info({:job_name => Job.get(id).name})
  # More Asynchronous work
  ::Instana.tracer.log_end(:my_async_op, { :job_success => true })
end

MyClass.run_in_5_minutes(block)

::Instana.tracer.log_exit(:prep_job, { :prep_successful => true })

Sağlanan Yayımlara Özel Etiketler Ekleme

Bir Instana sağlanan süreye özel etiketler eklemek için set_tag yöntemini kullanın ve aşağıdaki HASH ' yi etkin yayma değerine ekleyin.

active_span = ::Instana.tracer.current_span

unless active_span.custom?
  custom_tags = {
    key: 'value'
  }

  active.span.set_tag(:sdk, {custom: {tags: custom_tags}})
end

Ayrıca bkz.