【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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...