【New Relic】給基於.NET Framework 4.0 的 exe 程式安裝New Relic

来源:https://www.cnblogs.com/HDK2016/p/18254539
-Advertisement-
Play Games

由於.NET Framework 4.0 是比較古老的版本,只有New Relic 7.0以下的版本才會支持.NET Framework 4.0的引用程式。 Technical support for .NET Framework 4.0 or lower 你可以參考這個官方Install New ...


由於.NET Framework 4.0 是比較古老的版本,只有New Relic 7.0以下的版本才會支持.NET Framework 4.0的引用程式。 Technical support for .NET Framework 4.0 or lower

 

你可以參考這個官方Install New Relic to Monitor your App的文檔。

 

1. 創建New Relic 賬號

創建一個New Relic 賬號,並且獲取你的New Relic License key,由於我的程式不是托管到IIS的web程式,所以使用Ingest-License類型的Key.

 

你可以參考官方的 New Relic API keys 或是直接訪問 API keys UI page . 來查看你自己的License Key.

 

2. 安裝new relic agent

通過這個頁面 https://download.newrelic.com/dot_net_agent/6.x_release/ 下載win-x64-6.27.0.0的版本。

這裡我下載的是newrelic-agent-win-6.27.0.0-scriptable-installer.zip 並解壓縮

用管理員許可權打開命令行視窗工具,執行下麵命令

install.cmd -LicenseKey your_license_key -InstrumentAll

將 your_license_key 替換為你自己的 license key。 由於預設安裝的New Relic Agent是不監聽非IIS程式的,所以要加上 -InstrumentAll 讓Agent能夠監聽所有程式。

 

安裝完成後,你的電腦會多出來兩個Agent的目錄,C:\ProgramData\New Relic 和 C:\Program Files\New Relic文件夾。

 

3. 設置 agent目錄許可權

在C:\ProgramData\New Relic下麵,給.Net Agent目錄加上所有人許可權。

 

4. 更改new relic配值

用記事本打開本地的C:\ProgramData\New Relic\.NET Agent\newrelic.config配置文件。

 

觀察service上的licenseKey是否正確,並且增加 sendDataOnExit="true" sendDataOnExitThreshold="1000"的配置。

在application的name標簽下指定程式的名稱,這個名稱後面會被推送到NewRelic的Dashboard上。

在Instruction 的application標簽下指定要運行的EXE。

  <service licenseKey="your_license_key" ssl="true" sendDataOnExit="true" sendDataOnExitThreshold="1000"/>
  <application>
    <name>Your_Application_Name</name>
  </application>

  <instrumentation>
    <applications>
      <application name="your_exe_folder\your_application.exe" />
    </applications>
  </instrumentation>

下麵是我本地的New Relic 配置

<?xml version="1.0"?>
<!-- Copyright (c) 2008-2017 New Relic, Inc.  All rights reserved. -->
<!-- For more information see: https://newrelic.com/docs/dotnet/dotnet-agent-configuration -->
<configuration xmlns="urn:newrelic-config" agentEnabled="true">
  <service licenseKey="your_license_key" ssl="true" sendDataOnExit="true" sendDataOnExitThreshold="1000"/>
  <application>
    <name>AudaParts Job7</name>
  </application>

  <instrumentation>
    <applications>
      <application name="your_exe_folder\your_application.exe" />
    </applications>
  </instrumentation>

  <log level="info" />
  <transactionTracer enabled="true" transactionThreshold="apdex_f" stackTraceThreshold="500" recordSql="obfuscated" explainEnabled="false" explainThreshold="500" />
  <crossApplicationTracer enabled="true" />
  <errorCollector enabled="true">
    <ignoreErrors>
      <exception>System.IO.FileNotFoundException</exception>
      <exception>System.Threading.ThreadAbortException</exception>
    </ignoreErrors>
    <ignoreStatusCodes>
      <code>401</code>
      <code>404</code>
    </ignoreStatusCodes>
  </errorCollector>
  <browserMonitoring autoInstrument="true" />
  <threadProfiling>
    <ignoreMethod>System.Threading.WaitHandle:InternalWaitOne</ignoreMethod>
    <ignoreMethod>System.Threading.WaitHandle:WaitAny</ignoreMethod>
  </threadProfiling>
</configuration>
View Code

記得將liceseKey,name 和 Application name替換為你自己的數據。

 

5. 添加Extentions

由於我們想要New Relic 監控非IIS的托管的程式,在上面的配置中,我們已經指定要監控的exe程式 your_exe_folder\your_application.exe 。現在我們需要告訴New Relic 程式需要監控EXE中的那些數據,這就是Extension的作用。Extension都是xml文件,並且放置在C:\ProgramData\New Relic\.NET Agent\Extensions目錄下,我們只需要將編寫好的Extension放到該目錄下即可。

 

比如我們EXE的代碼中有如下的函數需要監控

namespace Order.Core.Business
{
  public partial class OrderManager
  {
    public void GenerateOrdersAutomatically(UserManager objUser, bool quotationAuction = false)
    {
        //some code in here
    }
  }
}

 

如果上面這段程式編譯出來的代碼dll的程式集名稱是 Order.Core 的話,那麼只需要參考官方文檔給的格式 Create transactions via XML (.NET) 填寫上數據就可以了

<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="urn:newrelic-extension">
  <instrumentation>
    <!-- Define the method which triggers the creation of a transaction. -->
    <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="TransactionName">
      <match assemblyName="AssemblyName" className="NameSpace.ClassName">
        <exactMethodMatcher methodName="MethodName" />
      </match>
    </tracerFactory>
    <!-- Define the method which triggers the creation of a transaction. -->
    <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="TransactionName2">
      <match assemblyName="AssemblyName" className="NameSpace.ClassName2">
        <exactMethodMatcher methodName="MethodName2" />
      </match>
    </tracerFactory>
    <!-- Define the method which triggers the creation of a transaction. -->
    <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="TransactionName3">
      <match assemblyName="AssemblyName" className="NameSpace.ClassName3" minVersion="1.0.0" maxVersion="99.99.99">
        <exactMethodMatcher methodName="MethodName3" />
      </match>
    </tracerFactory>
  </instrumentation>
</extension>

 

那麼我的案例的extension xml就應該是如下的格式

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2020 New Relic Corporation. All rights reserved.
SPDX-License-Identifier: Apache-2.0 -->
<extension xmlns="urn:newrelic-extension">
    <instrumentation>
        <tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory"
                       metricName="GenerateOrdersAutomatically">
            <match assemblyName="Order.Core"
                   className="Order.Core.Business.OrderManager">
                <exactMethodMatcher methodName="GenerateOrdersAutomatically" />
            </match>
        </tracerFactory>
    </instrumentation>
</extension>

 

註意,extension 不需要給每個方法都配置,一般只需要按照Transaction分類後的,配置每個Transaction的入口方法就可以了。New Relic會自動追鐘每個函數下麵調用的其它函數和資料庫(如果有調用的資料庫的話)。沒有必要給Console 程式 Main方法配置Extension,因為Main方法太寬泛了,如果將Main配置成一個單獨的Transaction, 那麼這個Transaction下麵就會囊括所有的方法調用,這樣就失去了Transaction分類監控的意義了。

 

 

昨晚上面這些配置的話,New Relic的監控就應該已經啟動了。

 

6. 觀察日誌

在C:\ProgramData\New Relic\.NET Agent\Logs目錄下麵,有New Relic的所有運行日誌。如果沒有問題的話,你應該可以看到Metric harvest starting, Reporting to: 這些信息。

 

 

你可以直接點開Reporting to後面的連接,會跳轉到New Relic web網頁上,上面就可以看到詳細的信息。

 

7. 觀察New Relic Dashboard

打開New Relic Web,將 Transaction Type 選成  Non-Web  就可以查看我們監控的exe的數據啦

 

從一個Transaction點進去,你可以看到整個調用流程,調用每個函數花費的時間,和資料庫的SQL和花費時間等等。還可以觀察錯誤日誌。

 

有時,Agent 上傳數據到New Relic Web 有時候會有延遲。

 

如果你遇到了TLS的問題導致無法連接到collector.newrelic.com的話

Unable to connect to the New Relic service at collector.newrelic.com:443

可以參考No data appears after disabling TLS 1.0 | New Relic Documentation的解決方案。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C# 13 即 .Net 9 按照計劃會在2024年11月發佈,目前一些新特性已經定型,今天讓我們來預覽一個比較大型比較重要的新特性: 擴展類型 extension types ...
  • 目錄前言學習參考過程總結: 前言 做個自由仔。 學習參考 ChatGpt; https://www.cnblogs.com/zhili/p/DesignPatternSummery.html(大佬的,看了好多次) 過程 原由: 一開始只是想查查鏈式調用原理,以為是要繼承什麼介面,實現什麼方法才可以實 ...
  • 一:背景 1. 講故事 在dump分析的過程中經常會看到很多線程卡在Monitor.Wait方法上,曾經也有不少人問我為什麼用 !syncblk 看不到 Monitor.Wait 上的鎖信息,剛好昨天有時間我就來研究一下。 二:Monitor.Wait 底層怎麼玩的 1. 案例演示 為了方便講述,先 ...
  • 在以前我做程式的時候,一般在登錄視窗裡面顯示程式名稱,登錄視窗一般設置一張背景圖片,由於程式的名稱一般都是確定的,所以也不存在太大的問題,不過如果客戶定製不同的系統的時候,需要使用Photoshop修改下圖層的文字,再生成圖片,然後替換一下也可以了。不過本著減少客戶使用繁瑣性,也可以使用空白名稱的通... ...
  • .Net 中提供了一系列的管理對象集合的類型,數組、可變列表、字典等。從類型安全上集合分為兩類,泛型集合 和 非泛型集合,傳統的非泛型集合存儲為Object,需要類型轉。而泛型集合提供了更好的性能、編譯時類型安全,推薦使用。 ...
  • 今天在技術群里,石頭哥向大家提了個問題:"如何在一個以System身份運行的.NET程式(Windows Services)中,以其它活動的用戶身份啟動可互動式進程(桌面應用程式、控制台程式、等帶有UI和互動式體驗的程式)"? 我以前有過類似的需求,是在GitLab流水線中運行帶有UI的自動化測試程 ...
  • OPC基金會提供了OPC UA .NET標準庫以及示常式序,但官方文檔過於簡單,光看官方文檔和示常式序很難弄懂OPC UA .NET標準庫怎麼用,花了不少時間摸索才略微弄懂如何使用,以下記錄如何從一個控制台程式開發一個OPC UA伺服器。 安裝Nuget包 安裝OPCFoundation.NetSt ...
  • 前言 隨著 DEV24.1.3 的發佈,XAF Blazor 中的屬性編輯器(PropertyEditor)也進行了很大的改動,在使用體驗上也更接近 WinForm 了,由於進行了大量的封裝,理解上沒有 WinForm 直觀,所以本文通過對屬性編輯器的原理進行解析,並對比新舊版本中的變化,使大家能夠 ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式會偶發性的卡死一段時間,然後又好了,讓我幫忙看下怎麼回事?窗體類的程式解決起來相對來說比較簡單,讓朋友用procdump自動抓一個卡死時的dump,拿到dump之後,上 windbg 說話。 二:WinDbg 分析 1. 主線程在做什麼 要想 ...
  • 功能說明 使用ListView時,希望可以在單元格顯示圖片或其他控制項,發現原生的ListView不支持,於是通過拓展,實現ListView可以顯示任意控制項的功能,效果如下: 實現方法 本來想著在單元格裡面實現控制項的自繪的,但是沒找到辦法,最後是通過在單元格的錶面顯示對應控制項的,浮於錶面達到目的。 實 ...
  • 由於.NET Framework 4.0 是比較古老的版本,只有New Relic 7.0以下的版本才會支持.NET Framework 4.0的引用程式。 Technical support for .NET Framework 4.0 or lower 你可以參考這個官方Install New ...
  • 前言 隨著 DEV24.1.3 的發佈,XAF Blazor 中的屬性編輯器(PropertyEditor)也進行了很大的改動,在使用體驗上也更接近 WinForm 了,由於進行了大量的封裝,理解上沒有 WinForm 直觀,所以本文通過對屬性編輯器的原理進行解析,並對比新舊版本中的變化,使大家能夠 ...
  • OPC基金會提供了OPC UA .NET標準庫以及示常式序,但官方文檔過於簡單,光看官方文檔和示常式序很難弄懂OPC UA .NET標準庫怎麼用,花了不少時間摸索才略微弄懂如何使用,以下記錄如何從一個控制台程式開發一個OPC UA伺服器。 安裝Nuget包 安裝OPCFoundation.NetSt ...
  • 今天在技術群里,石頭哥向大家提了個問題:"如何在一個以System身份運行的.NET程式(Windows Services)中,以其它活動的用戶身份啟動可互動式進程(桌面應用程式、控制台程式、等帶有UI和互動式體驗的程式)"? 我以前有過類似的需求,是在GitLab流水線中運行帶有UI的自動化測試程 ...
  • .Net 中提供了一系列的管理對象集合的類型,數組、可變列表、字典等。從類型安全上集合分為兩類,泛型集合 和 非泛型集合,傳統的非泛型集合存儲為Object,需要類型轉。而泛型集合提供了更好的性能、編譯時類型安全,推薦使用。 ...
  • 在以前我做程式的時候,一般在登錄視窗裡面顯示程式名稱,登錄視窗一般設置一張背景圖片,由於程式的名稱一般都是確定的,所以也不存在太大的問題,不過如果客戶定製不同的系統的時候,需要使用Photoshop修改下圖層的文字,再生成圖片,然後替換一下也可以了。不過本著減少客戶使用繁瑣性,也可以使用空白名稱的通... ...
  • 一:背景 1. 講故事 在dump分析的過程中經常會看到很多線程卡在Monitor.Wait方法上,曾經也有不少人問我為什麼用 !syncblk 看不到 Monitor.Wait 上的鎖信息,剛好昨天有時間我就來研究一下。 二:Monitor.Wait 底層怎麼玩的 1. 案例演示 為了方便講述,先 ...
  • 目錄前言學習參考過程總結: 前言 做個自由仔。 學習參考 ChatGpt; https://www.cnblogs.com/zhili/p/DesignPatternSummery.html(大佬的,看了好多次) 過程 原由: 一開始只是想查查鏈式調用原理,以為是要繼承什麼介面,實現什麼方法才可以實 ...