由於.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的解決方案。