Özel izleme için en iyi uygulamalar

Instana AutoTrace™ ya da Ingest el ile izleme kodu eklenmiş yayımı genişletmek istiyorsanız, aşağıdaki en iyi uygulamaları izlemenizi öneririz.

Ek açıklamalı olan bu kapsaları kullan

Uygulamaları ve altyapınızı en iyi şekilde izlemek, öğrenmek ve uyarlamak için, Instana, tüm gelen veriler üzerinde gelişmiş işleme ve çözümleme gerçekleştirir. Bu, tüm kaynaklardaki tüm gelen kapları içerir.

Instana 'nın otomatik analizini ve işlemesini en iyi şekilde elde etmek için, ilgili etiketleri kaplamanıza eklemek, Instana 'nın en iyi analiz etmesine ve gelen kaplara göre işlem yapma olanağı sağlar.

Örneğin, aşağıdaki Python OpenTracing kodu çok az bilgi sağlar.

Not: Aşağıdaki örnekte, göstermek için OpenTracing kullanılmıştır; ancak bu, tüm özel izleme kodlarına ilişkin bir amaç için geçerlidir.

import opentracing

with opentracing.tracer.start_active_span('vanilla') as pscope:
  # ...
  # do something that takes 50ms
  # ...
  pscope.span.log_kv({"foo": "bar"})

Bu koddan yalnızca, 50 ms süreden vanilla adlı bir yayılma olduğunu biliyoruz. Ne tür bir yayılma olduğunu bilmiyoruz; HTTP, RPC ya da bir ileti sistemi. Bu süre içinde, altyapınızdaki herhangi bir bileşenle iletişim kurmak gibi, ne olduğunu bilmiyoruz.

Uygun bağlamsal OpenTracing etiketlerini sağlıyorsa, Instana bu kapsamdaki bilgileri analiz etmek için analiz eder ve çıkarır.

import opentracing
import opentracing.ext.tags as ext

with opentracing.tracer.start_active_span('webserver') as pscope:
    pscope.span.set_tag(ext.SPAN_KIND, "entry")
    pscope.span.set_tag(ext.PEER_HOSTNAME, "localhost")
    pscope.span.set_tag(ext.HTTP_URL, "/python/simple/two")
    pscope.span.set_tag(ext.HTTP_METHOD, "POST")
    pscope.span.log_kv({"foo": "bar"})

    # ...
    # work that took 50ms
    # ...

    pscope.span.set_tag(ext.HTTP_STATUS_CODE, 204)

Bu iyi açıklamalı yayılma, Instana 'ya yayılma bağlamında neler olduğu hakkında çok daha fazla bilgi verir. From the tags provided, we know that this is an incoming webserver request to /python/simple/two and the resulting HTTP status code is 204.

Yukarıdaki gibi ek açıklamalı bir aralık, gösterge panonuzun içinde daha zengin bir deneyim sağlayan, Instana 'nın hizmetleri, izleme bağlantılarını ve onların sağlıklarını çıkarmasını sağlar.

Bu örnekte, desteklenen tüm OpenTracing etiketlerinin yetkili listesini tanımlayan OpenTracing belirtimi başlıklı konuya bakın. Bu sayfanın sonunda, Instana tarafından desteklenen ( OpenTracing etiketleri üst kümesi olan) kapsamlı bir etiket listesi kullanılabilir.

"Built-In" Yayımlarıyla Ek Açıklama Ekleme

Bazı durumlarda, bir Instana tarafından sağlanan bir kitaplık tarafından sağlanan var olan bir kapsamaya ek meta veriler eklemek mantıklı olabilir. Bu verilerin görüntülenmesi için, izleme sırasında sdk.custom.tags nesnesinin içinde olması gerekir.

Her kitaplık bunu farklı şekilde işler. Bu nesnenin nasıl ekleneceğini anlamak için, dilinizin SDK ' ya ilişkin belgeleri denetleyin.

Girişe ilişkin yeni izlemeleri başlatır

Dağıtılmış izleme içinde, üç ana tip yayılıma vardır:

  • Girdi: Bir isteğin, yeni bir görevin başlatılması ya da bir iletinin alınmasını geçersiz kılan
  • Ara: çağrıları yapmayan ya da alma gerçekleştirmeyen iç işleri ek açıklama ekler (örneğin, görsel olarak görüntüleme)
  • Çıkış: Bir uzak hizmete çağrı yapan ya da bir iletiyi kuyruğa yayınlayan işe ek açıklama ekler.

span.kind etiketi, raporlanan yayılma tipini işaretler. See span.kind in the table at the end of this page or alternatively in the OpenTracing belirtimi for more details.

Yeni izleme başlatırken, bir Giriş aralığı ile başlayın. span.kind etiketini belirtmezseniz, yayılma bir Girdi tipi olarak kabul edilir. Bu etiketin uygun değere ayarlanması, Instana 'da daha iyi işleme, görselleştirme arka ucu çağrısı çıkarma ve eşleme işlemleri sağlar.

Aşağıdaki Go örneğine bakın:

// Start a new entry span and set 'kind' to Consumer (entry)
entrySpan := ot.StartSpan("RPCJobRunner")
entrySpan.SetTag(string(ext.SpanKind), string(ext.SpanKindConsumerEnum))

// Now the RPC exit span
spanName := fmt.Sprintf("%s %s", request.Service, request.Method)
clientSpan := ot.StartSpan(spanName, ot.ChildOf(entrySpan.Context()))
clientSpan.SetTag(string(ext.SpanKind), string(ext.SpanKindRPCClientEnum))
clientSpan.SetTag("rpc.call", request.Method)

// Make the RPC call

clientSpan.Finish()
entrySpan.Finish()

Bir hataya ilişkin bir aralığı işaretlemek

Bir hata içeren, kural dışı durum gibi bir hatayı gösteren, error ve message etiketlerini içermesi gereken işleri kapsar. Bu etiketlerin tanımları için, çizelgedeki tanımlara aşağıdaki gibi bakın.

Mikrohizmetler arasında bağlama bağlama

Anasistemler, kuyruklar ve hizmetler gibi sınırlar arasında bağlam geçirmek için, dağıtılmış izleme bir yöntem içerir. Bu, genellikle HTTP üstbilgileri ya da ileti kuyruğu üstbilgileri gibi taşıyıcılarla yapılır.

Daha fazla ayrıntı için HTTP Üstbilgileriile ilgili belgelerimize bakın.

Hizmet adı belirle

Bu isteğe bağlıdır. Hizmet adları, izlenen uygulama işlemleri için uygulanan adlardır. Birçok dilde, en iyi hizmet adı, Framework ya da process komut satırında otomatik olarak saptlanabilir.

Bu değeri geçersiz kılmak istiyorsanız, İzleyici başına bir hizmet adı ayarlayabilirsiniz. Go dili için aşağıdaki örneğe bakın.

serviceName := "default"
if *isServer {
    serviceName = "rpc-client"
} else {
    serviceName = "rpc-server"
}

opts := instana.Options{Service: serviceName})
opentracing.InitGlobalTracer(instana.NewTracerWithOptions(&opts)

Tüm Instana OpenTracing Tracers, ortam değişkeni aracılığıyla bu yapılandırmayı destekler. Süreç için INSTANA_SERVICE_NAME ortam değişkenini ayarladıysanız, bu değer sürece ilişkin hizmet adı olarak kullanılır. Bu, kod düzeyi hizmet adı yapılandırmasını geçersiz kılar.

Ayrıca, Instana 'nın genel hizmet çıkarma teknikleri ve kurallarıylailgili belgelere de bakın.

Bir uç nokta ve bir çağrı adı ayarlayın

Bu isteğe bağlıdır. Birçok dilde, uç nokta ve arama adları, hizmet tipine bağlı olarak otomatik olarak saptlanır.

Bunu geçersiz kılmak istiyorsanız, İzleyici başına uç nokta ve çağrı adları ayarlayabilirsiniz. Java dili için aşağıdaki örneğe bakın.

SpanSupport.annotate(Span.Type.ENTRY, "my-custom-span", "endpoint", "endpoint-name");
SpanSupport.annotate(Span.Type.ENTRY, "my-custom-span", "call.name", "call-name");

Instana 'nın genel uç noktası çıkarma teknikleri ve kurallarıyla ilgili daha fazla bilgi için uç noktalar belgelerimizebakın.

Sürenin üzerine yaz

Tracing SDK, kapsamın başlangıcından ve sonundan itibaren süresi otomatik olarak hesapladı.

Genellikle neyi ölçmek istediğinizi gösterir, ancak ne zaman değilse duration etiketini kullanarak bunun üzerine yazabilirsiniz.

Beklenen biçim milisaniye olarak.

// Overwrite the span duration with 15 milliseconds.
SpanSupport.annotate(Span.Type.ENTRY, "my-custom-span", "duration", "15");

Yol şablonları: HTTP uç noktalarının görsel gruplaması

Instana, yol şablonlarıyla uç noktaların otomatik olarak gruplanmasını destekler. Bu, birçok çerçeve için Instana izlemesi içeren kutudan desteklenmektedir. OpenTracingile, aşağıda açıklandığı gibi ek bir adım gereklidir.

Çeşitli çerçevelerin genellikle aşağıdakine benzer bir REST yolu örünmesi vardır:

/api/query/1956-01-31/Guido-van-Rossum
/api/query/1976-04-18/Andrew-Ng
/api/query/1912-06-23/Alan-Turing

Bu benzer uç noktalar, HTTP kaplanınızdaki http.path_tpl anahtarını /api/query/{birthdate}/{name}değeriyle raporlayarak gruplandırılabilir. Instana, bu şablonu, sağlanan kalıpla eşleşen uç noktaları otomatik olarak gruplamak için kullanır. Instana gösterge panosunda, HTTP uç noktaları tek uç nokta olarak gruplanacaktır:

/api/query/{birthdate}/{name}

Go: (Git) başlıklı konuya bakın.

span := ot.GlobalTracer().StartSpan("myTemplatedSpan", ext.RPCServerOption(incomingContext))
span.SetTag("http.path_tpl", "/api/query/{birthdate}/{name}")
span.SetTag(string(ext.SpanKind), string(ext.SpanKindRPCServerEnum))
span.SetTag(string(ext.HTTPUrl), req.URL.Path)
span.SetTag(string(ext.HTTPMethod), req.Method)
span.SetTag(string(ext.HTTPStatusCode), 200)

Bu özelliğin Instanca 'ya özgü olduğunu ve OpenTracing uyumlu olmadığını unutmayın.

İşlenen etiketler

Bu bölümde, tanımlayan ve işlenirken Instana 'nın bakışlarına ilişkin belirli etiketler listelenir. Bir aralık için aşağıdaki gibi etiketlerin bir alt kümesi bulunduğunda, bir eşgörünüm gelen kapsamalarda daha iyi süreç, analiz, görselleştirme ve uyarı yapabilir.

Aşağıdaki gibi listelenen etiketlerin standart OpenTracing etiketlerinin bir üst kümesi olduğunu unutmayın. Each tag is marked on whether it is OpenTracing compliant with either a or x if it is not.

Aşağıdaki gibi bazı etiket tanımları doğrudan doğruya OpenTracing semantik kuralları belgesi' dan alınır.

Türü

Dağıtık izleme dünyasında üç ana kategori kategorisi vardır:

  1. Girdi yayılıyor: alma isteklerini (HTTP ya da RPC sunucuları gibi) kapsar, bir kuyruktan ileti tüketir ya da bir işi çalıştırır
  2. Çıkış yayılır: İstemci isteklerini (örneğin, HTTP, RPC ya da veritabanı) oluşturan, iletileri bir kuyruğa gönderme ya da istemci veritabanı çağrıları yapma
  3. Ara yayılma aralıkları: Görüntüleme ya da işlem/denetleyici işleme gibi uygulamalarda yapılan işi gösteren bir kapsadır.

Bir aralık için span.kind etiketi, raporlanmakta olan yayılma tipini tanımlar. Bu etiketin raporlanması, Instana 'nın, yayılır arasındaki iletişimi çıkarmasına, işlemesine ve eşlemelerine olanak tanır. Instana 'da, bu iletişimi bir "çağrı" olarak ifade ediyoruz.

Bu tür bilgilere sahip olmak, Instana 'nın yalnızca yayılıma yayılmasını izlememesini sağlar, aynı zamanda sistemleriniz arasındaki bağlantıya ilişkin daha fazla kavrayış elde etmek arasındaki aramaları da izler. Bu durumda Instana, bu çağrıların sağlığıyla ilgili olarak bu çağrıların sağlığıyla ilgili izleme ve uyarı da raporlabilmektedir.

Etiket Tip OpenTracing uyumlu mu? Tanım
span.kind Dize RPC ya da HTTP isteğinde uygun roller için client ya da server , bir ileti alışverişi senaryosındaki uygun roller için producer ya da consumer . Kabul edilen diğer değerler şunlardır: entry, exit ya da intermediate , OpenTracing uyumlu değil.

HTTP

HTTP, bir HTTP istemcisi çağrısını ya da HTTP Server istek işlemini temsil eder.

Etiket Tip OpenTracing uyumlu mu? Tanım
http.url Dize Bu HTTP istemcisi isteğinde ya da sunucu işlemesinde kullanılan tam HTTP URL adresi.
http.method Dize Bu HTTP istemcisi isteğinde ya da sunucu işlemesinde kullanılan HTTP yöntemi. Örnekler: "GET", "POST", "PUT" vb.
http.status_code Tamsayı Bu HTTP isteğinin HTTP durum kodu.
http.status Tamsayı x http.status_codeiçin alternatif. Her ikisi de desteklense de, yalnızca biri gönderilmelidir.
http.path Dize x İstemenin HTTP yolu.
http.host Dize x Bir istemci isteği ya da anasistem gelen bir HTTP isteğini işleyecekse, uzak anasistem.
http.params Dize x HTTP isteğine ilişkin sorgu değiştirgeleri
http.error Dize x Bir hata durumunda, bu kapsamla ilişkili bir hata iletisi. Örneğin, "İç Sunucu Hatası"
http.header Dize x Özel üstbilgileri "X-My-Custom-Header=afd812cab" gibi bu kapsamla raporlamak için kullanılır.
http.path_tpl Dize x Uç noktaların görsel olarak gruplanmasına olanak sağlar. Ayrıntılar için Yol Şablonları belgelerine bakın.

|http.route_id| String|x | blog.showgibi rotalarınız için benzersiz bir tanıtıcı; tanıtıcı temelinde ayrı bir uç noktaya başvuruda bulunulduğu çerçeveler ile yararlı olur.

Not:

  1. Uygun bir span.kind her zaman bu etiketlerle gönderilmelidir.
  2. http.host, http.path ve http.params , yalnızca http.urlyerine gönderilmelidir. Bu etiketlerin bir karışımını http.url ile gönderme işlemi desteklenmez ve sonuçlar tanımsız olur.

RPC

RPC, RPC ya da RPC sunucu çağrısı işlemlerinde yapılan işi gösteren bir işlemdir.

Etiket Tip OpenTracing uyumlu mu? Tanım
rpc.call Dize Çağrılan ya da hizmet verilen RPC çağrısı ( span.kinddeğerine bağlıdır)
rpc.host Dize İstemci çağrıları için RPC uzak anasistemi ya da RPC sunucusu RPC sunucusu tarafından RPC sunucusu tarafından işlenmesini sağlar.
rpc.params Dize x RPC çağrısına ilişkin değiştirgeler
rpc.port Dize x RPC çağrısına ilişkin kapı
rpc.flavor Dize x RPC kitaplığının XMLRPC, GRPCIO vb. gibi kullanımda olduğu
rpc.error Dize x RPC çağrısıyla ilişkili hata iletisi

Not: Bu etiketlerle uygun bir span.kind gönderilmelidir.

GraphQL

Etiket Tip OpenTracing uyumlu mu? Tanım
graphql.operationType Dize x Query veya Mutation
graphql.operationName Dize x Sorgu ya da mutasyon adı
graphql.fields JSON/object ya da stringified JSON (bkz. aşağıdaki gibi) x Sorgunun ya da mutasyonunun bir parçası olarak kullanılan alanlar
graphql.arguments JSON/object ya da stringified JSON (bkz. aşağıdaki gibi) x Sorgunun bir parçası olarak kullanılan bağımsız değişkenler

graphql.fields ve graphql.arguments ile ilgili olarak, izleyici tarafından desteklenen verilere bağlı olarak, uygun veri tipini (JSON ya da Dizgi) seçmeniz gerekir.

Örnekler:

// NodeJS SDK => JSON
span.annotate('sdk.custom.tags.graphql.fields', {
    Account: [ 'id', 'name' ],
    User: [ 'id', 'name' ]
})
span.annotate('sdk.custom.tags.graphql.arguments', {
    User: [ 'where', 'orderBy' ]
})

// Java SDK => String
SpanSupport.annotate("graphql.fields", "{ \"Account\": [\"id\", \"name\"], \"User\": [\"id\", \"name\"] }");
SpanSupport.annotate("graphql.arguments", "{ \"User\": ["\where\", \"orderBy\"] }");

Veritabanı

Etiket Tip OpenTracing uyumlu mu? Tanım
db.instance Dize Veritabanı örneği adı. Java 'da örnek olarak, jdbc.url="jdbc:mysql://127.0.0.1:3306/customers"yönetim ortamı adı "müşteri'se"
db.type Dize Herhangi bir SQL veritabanı için, "sql". Diğerleri için, küçük harfli veritabanı kategorisi; örneğin, "cassandra", "hbase" ya da "redis".
db.statement Dize Verili veritabanı tipine ilişkin bir veritabanı deyimi. Örneğin, db.type "SQL"- SELECT * FROM user_tableolduğunda; db.type "reis"- SET mykey 'WuValue'olduğunda.
db.user Dize Veritabanına erişmek için kullanıcı adı. Örneğin, "readonly_user" ya da "reporting_user"
db.connection_string Dize
Bağlantı dizgisi; örneğin, jdbc:mysql://127.0.0.1:3306/customers

İleti Sistemi

Etiket Tip OpenTracing uyumlu mu? Tanım
message_bus.destination Dize İletilerin değiş tokuş edilebileceği bir adres. Bir konu ya da kuyruk olabilir ve bu şekilde devam edebilirsiniz.

Toplu İşi

Etiket Tip OpenTracing uyumlu mu? Tanım
batch.job Dize x Yürütülmekte olan işin adı.

Eşdüzey

Etiket Tip OpenTracing uyumlu mu? Tanım
peer.hostname Dize Bir çıkışa ilişkin uzak anasistem, giden bir arama yapıyor.
peer.address Dize Giden bir arama yapan bir çıkışa ilişkin uzak adres.
peer.service Dize Giden bir arama yapan bir çıkış aralığının uzak kenarının hizmet adı. Bunun isteğe bağlı olduğunu ve uzak taraf önceden izleme kodu içerilmediği durumlarda kullanılabilir olduğunu unutmayın.

Hataları

Etiket Tip OpenTracing uyumlu mu? Tanım
error Boole Bu sürenin temsil ettiği süre içinde bir hata ile karşılaşılıp karşılaşıldığını belirtir.
message Dize x Hatayla ilişkili bir ileti

Ayrıca bkz.