New Relixir 使用教程
项目介绍
New Relixir 是一个用于在 Phoenix 和 Plug 应用程序中集成 New Relic 跟踪的开源项目。它支持对基本的 Plug 端点、Phoenix 控制器和 Ecto 存储库进行检测,以记录 Web 事务和数据库查询的响应时间。该项目由 The RealReal 维护,并遵循 MIT 许可证。
项目快速启动
安装依赖
首先,将 new_relixir
添加到你的项目的依赖列表中:
# mix.exs
defmodule MyApp.Mixfile do
use Mix.Project
def project do
[
app: :my_app,
version: "0.1.0",
elixir: "~> 1.10",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
defp deps do
[
{:new_relixir, "~> 0.4"}
]
end
end
如果你使用的是 Elixir 1.4 之前的版本,还需要在 application
函数中添加 new_relixir
:
def application do
[
mod: {MyApp, []},
applications: [:new_relixir]
]
end
配置 Endpoint
在 Endpoint
配置中添加 NewRelixir
检测器:
# lib/my_app/endpoint.ex
defmodule MyApp.Endpoint do
use Phoenix.Endpoint, otp_app: :my_app
plug NewRelixir.Instrumenters.Phoenix
end
配置 Repo
使用 NewRelixir
包装你的 Repo
:
# lib/my_app/repo.ex
defmodule MyApp.Repo do
use Ecto.Repo, otp_app: :my_app
defmodule NewRelic do
use NewRelixir.Plug.Repo, repo: MyApp.Repo
def my_custom_operation(queryable, opts \\ []) do
instrument_db(:my_custom_operation, queryable, opts, fn ->
MyApp.Repo.my_custom_operation(queryable, opts)
end)
end
end
end
应用案例和最佳实践
错误报告
如果你想将所有错误报告给 New Relic,可以在路由器中进行配置:
# lib/my_app/router.ex
defmodule MyApp.Router do
use MyApp, :router
use NewRelixir.Plug.Exception
end
捕获错误
捕获并报告错误:
try do
raise "oops"
catch
kind, reason ->
transaction =
case NewRelixir.CurrentTransaction.get() do
{:ok, transaction} -> transaction
{:error, _} -> NewRelixir.CurrentTransaction.set(conn, request_path)
end
NewRelixir.Transaction.record_error(transaction, [kind, reason])
:erlang.raise(kind, reason, System.stacktrace())
end
典型生态项目
New Relixir 主要用于与 Phoenix 和 Plug 框架集成,以提供性能监控和错误跟踪。以下是一些相关的生态项目:
- Phoenix: 一个用于构建现代 Web 应用程序的 Elixir 框架。
- Ecto: 一个用于数据库操作的 Elixir 库。
- New Relic: 一个提供性能监控和分析的云服务。
通过这些项目的结合使用,可以有效地监控和优化你的 Elixir 应用程序的性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考