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
- Zamanuyumsuz İzleme
- Yeni İş Parçacıklarına Bağlam Taşıma
- Daha Sonra İçin Zamanlanan İzleme İşleri
- Instana Sağlanan Yayımlara Özel Etiketler Ekleme
- Ayrıca bkz.
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 })