مراقبة هاسكيل

Instana's support for monitoring and tracing of Haskell applications is documented in depth on the Instana Haskell Trace SDK's صفحة Giuthb. وثائق API الخاصة به متاحة على Hackage.

ما هو Haskell Trace SDK هو وما هو غير صحيح

لا يقوم Traking Haskell Trace SDK بدعم التتبع / التتبع الآلي بالطريقة التي ندعمها بها بمعظم اللغات الأخرى. بدلا من ذلك ، يسمح لك SDK بتكوين spans يدويا ، مثلما يفعل SDK Trace SDK الى Java . بالاضافة الى عرض API ملائم لتكوين spans ، يقوم Haskell Trace SDK أيضا بتحديد وصلة الى Intance Agent وارسال spans الى agent بطريقة فعالة ، والتي لا تعوق أداء كود الانتاج الخاص بك. وأخيرا وليس آخرا ، فإنه يجمع مقاييس وقت التشغيل ويقدم تقارير عنها إلى Incass.

تركيب

لاستخدام Intana Haskell Trace SDK في التطبيق الخاص بك ، قم بالاضافةinstana-haskell-trace-sdkالى الارتباطات الخاصة بك (على سبيل المثال ، الىbuild-dependsجزء من ملف cabal file الخاص بك). اذا كنت تقوم باستخدام مجموعة قد تحتاج الى اضافة SDK (مع رقم النسخة الذي ترغب في استخدامه) الىextra-depsالقسم في الخاص بكstack.yamlملف:

extra-deps:
- instana-haskell-trace-sdk-0.7.0.0

بناءا على وحدة حل stack التي تقوم باستخدامها ، قد تحتاج أيضا الى اضافة aeson-اضافية الى de-deps الخاصة بك :

- aeson-extra-0.4.1.3@sha256:8ad8e4d28e46280ea98af2e94dcaaf524c396c9d91b1eba867961efc6e7f923f,2997

استخدام

مثال ل app : خذ نظرة على متجر الرهبان لمشاهدة SDK الخاص بتتبع Intana Haskell في التصرف.

بدء التشغيل

قبل استخدام SDK ، يجب أن تقوم ببدء تشغيله مرة واحدة ، عادة أثناء بدء التطبيق.

import qualified Instana.SDK.SDK as InstanaSDK

main :: IO ()
main = do
  -- ... initialize things ...

  -- initialize Instana
  instana <- InstanaSDK.initInstana

  -- ... initialize more things

القيمةinstana :: Instana.SDK.InstanaContextالذي يتم ارجاعه بواسطةInstanaSDK.initInstanaمطلوب لكل الاستدعاءات الأخرى ، أي ، لتكوين spans التي سيتم ارسالها الى Agent. سيقوم SDK بمحاولة الاتصال ب ـagent (غير متزامن ، في سلسلة عمليات منفصلة) بمجرد أن يقوم باستلامinitInstanaاتصل

يمكن توصيف SDK من خلال متغيرات بيئة التشغيل أو مباشرة في الكود عن طريق تمرير معاملات التوصيف الى وظيفة الاعداد للبدء ، أو كلاهما.

اذا كنت ترغب في تمرير معاملات التوصيف بطريقة مبرمجة ، استخدمinitConfiguredInstanaبدلا منinitInstana:

import qualified Instana.SDK.SDK as InstanaSDK

main :: IO ()
main = do

  -- Example snippet for using the Instana SDK and providing a configuration
  -- (agent host, port, ...) directly in code. You only need to specify the
  -- configuration values you are interested in and can omit everything else
  -- (see https://www.yesodweb.com/book/settings-types).
  let
    config =
      InstanaSDK.defaultConfig
        { InstanaSDK.agentHost = Just "127.0.0.1"
        , InstanaSDK.agentPort = Just 42699
        , InstanaSDK.serviceName = Just "A Great Hakell Service"
        , InstanaSDK.forceTransmissionAfter = Just 1000
        , InstanaSDK.forceTransmissionStartingAt = Just 500
        , InstanaSDK.maxBufferedSpans = Just 1000
        }
  instana <- InstanaSDK.initConfiguredInstana config

بالنسبة لمعاملات التوصيف التي يتم استبعادها عند تكوين سجل التوصيف أو تم تحديدها الىNothing، سيتم اعادة SDK الى متغيرات بيئة التشغيل (أنظر أدناه) ثم الى القيم المفترضة.

يوجد أيضا نمط-قوس متغيرات خاصة بوظيفة الاعداد للبدء ، تسمىwithInstanaوwithConfiguredInstana:

import qualified Instana.SDK.SDK as InstanaSDK

main :: IO ()
main = do
  InstanaSDK.withInstana runApp

runApp :: InstanaContext -> IO ()
runApp instana = do
  -- do your thing here :-)

أو ، باستخدام نمط الأقواس وسجل التوصيف :

import qualified Instana.SDK.SDK as InstanaSDK

main :: IO ()
main = do
  let
    config =
      InstanaSDK.defaultConfig
        { InstanaSDK.agentHost = Just "127.0.0.1"
        , InstanaSDK.agentPort = Just 42699
        , InstanaSDK.serviceName = Just "A Great Hakell Service"
        , InstanaSDK.forceTransmissionAfter = Just 1000
        , InstanaSDK.forceTransmissionStartingAt = Just 500
        , InstanaSDK.maxBufferedSpans = Just 1000
        }

  InstanaSDK.withConfiguredInstana config runApp

runApp :: InstanaContext -> IO ()
runApp instana = do
  -- do your thing here :-)

تكوين مساحات

ادخالات Trace HTTP آليا

يمكنك السماح ل SDK آليا بتكوين مراوح الادخال لكل طلبات HTTP الواردة في تطبيق WAI من خلال استخدامه كبرنامج اضافي WAI middleware plug-in. يتم أخذ عناوين التتبع غير الخاصة بالتتبع وكذلك نصوص رأس سياق تتبع W3C آليا بواسطة الوصلة plug-in. لاحظ أنه مازال هناك حاجة الى تكوين exit spans يدويا من خلالwithHttpExitأوstartHttpExit/completeExitالوظائف (أنظر في أسفل).

plug-in middleware سيقوم أيضا باضافة نص رأس رد HTTP اضافي (Server-Timing) الى استجابات HTTP. يتيح هذا العنوان امكانية مراقبة موقع الانترنت لعملية مراقبة النظام الخلفي.

import qualified Instana.Wai.Middleware.Entry as InstanaWaiMiddleware

main = do
  Warp.run 3000 $ InstanaWaiMiddleware.traceHttpEntries instana $ app

Bracket Style (High Level API)

كل الوظائف التي تبدأ ب#withلقبول (بين المعاملات الأخرى) تصرف IO. سيقوم SDK ببدء الامتداد قبل ذلك ، ثم تنفيذ تصرف IO المحدد واستكمال الامتداد بعد ذلك. يتم التوصية باستخدام هذا النمط من خلال المستوى المنخفض API الذي يتطلب منك بدء واتمام spans نفسك.

Low Level API/Explicit Start And Complete

أفضل الممارسات

Make sure you have read Instana's docs على تتبع معدل.This documentation contains a lot of useful info for integrating Instana tracing into your code; among other things, it explains which بيانات التوصيف can be added to spans (viaInstanaSDK.addTagوInstanaSDK.addTagAt).

والتفرقة بين ما يطلق عليه ما يطلق عليه التشنجات المسجلة والتشنجات الخاصة ب SDK. عادة ما يتم تكوين spans مسجلة عن طريق التتبع الآلي وتوجد معالجة متخصصة لكل من السجلات المسجلة في خط تشغيل Inctanass. span SDK ، في المقابل ، هي نوع من spans التي تم تكوينها باستخدام تتبع SDK (مثل SDK الخاص بتتبع Haskell أو أي SDKs المماثل لبيئات تشغيل runtime الأخرى). يتم تشغيل امتداد SDK بطريقة أكثر عمومية من خلال تشغيل خط أنابيب Incera للمعالجة.

يجب ملاحظة أن كل spans التي تم تكوينها باستخدام SDK هذه يجب أن تكون span SDK. تعد الاستثنائين اثنين فقط ، حيث يقوم SDK بتكوين وحدات التشجعات المسجلة :

يقدم SDK وظائف خاصة لتكوين هذه spans المسجلة (withHttpEntry,withHttpExitبالاضافة الى الوظائف ذات المستوى الأدنى المناظرstartHttpEntryوstartHttpExit، انظر أعلاه).

متغيرات بيئة توصيف Configuration Via

بدلا من توصيف SDK المبرمج ، كما هو أعلى من ذلك ، يمكن أيضا توصيفه بواسطة متغيرات بيئة التشغيل :

مزيد من القراءة

للحصول على مزيد من المعلومات ، برجاء الرجوع الى المطبوعات الفنية الموجودة في Giuthb و Hackage.