Magento 비즈니스 인사이트 대시보드는 Magento 전자 상거래 애플리케이션의 성능에 대한 종합적인 보기를 제공합니다. 대시보드를 사용하면 위험 수익, 다운타임으로 인한 위험 주문, 시스템 성능 저하와 같은 주요 비즈니스 메트릭을 쉽게 추적할 수 있습니다. 대시보드를 사용하여 앱 성능 문제를 진단하고 코드를 최적화할 수도 있습니다.
Magento 비즈니스 인사이트 대시보드는 Magento 앱 데이터의 중앙 보기를 제공합니다.
New Relic에서 Magento 앱 모니터링을 시작하려면 다음 단계에 따라 앱 데이터를 New Relic으로 보내고 Magento 비즈니스 인사이트 대시보드에서 확인하십시오.
인프라 에이전트 설치
인프라 에이전트는 호스트를 모니터링하고 CPU 사용량, 메모리 사용량, 스토리지 사용량, 디스크 사용량 및 네트워크 트래픽과 같은 지표를 보고합니다.
에이전트를 설치하려면 다음 설치 방법 중 하나를 선택하십시오.
- 빠르고 쉬운 설치 프로세스를 위해 안내된 설치 단계를 따르세요.
- 고급 설치 프로세스를 위해 에이전트를 수동으로 설치합니다 .
PHP 에이전트 설치
당사의 PHP 에이전트는 AJAX 성능, 오류율, 기간, 핵심 웹 바이탈 및 처리량과 같은 애플리케이션 및 브라우저 관련 지표를 보고합니다.
에이전트를 설치하려면 다음 설치 방법 중 하나를 선택하십시오.
- 빠르고 쉬운 설치 프로세스를 위해 안내된 설치 단계를 따르세요.
- 고급 설치 프로세스를 위해 에이전트를 수동으로 설치합니다 .
MySQL 통합 설치
당사의 MySQL 통합은 데이터베이스를 모니터링하고 가장 느린 쿼리 및 노드별 활성 연결과 같은 데이터베이스 활용 및 연결에 대한 지표를 수집합니다.
통합을 설치하려면:
one.newrelic.com > Integrations & Agents
으)로 이동합니다.
MySQL
) 검색하고 클릭합니다.
계정을 선택하고 안내된 설치 단계를 따릅니다.
에이전트를 다른 방식으로 설치해야 하는 경우 MySQL 모니터링 통합을참조하세요.
Apache 통합 설치
Apache 통합은 TCP 연결, DNS 조회, HTTPS, SSL, 서버 및 작업자 상태와 같은 네트워크 지표를 수집합니다.
통합을 설치하려면 가이드 설치의 단계를 따르십시오.
다른 방식으로 통합을 설치해야 하는 경우 Apache 모니터링 통합을참조하십시오.
Elasticsearch 통합 설치
Elasticsearch 통합은 클러스터 상태 및 현재 샤드와 같은 지표를 수집합니다. Magento 버전 2.4 이상을사용하는 경우 Elasticsearch 통합을 설치해야 합니다.
통합을 설치하려면:
one.newrelic.com > Integrations & Agents
으)로 이동합니다.
Elasticsearch
) 검색하고 클릭합니다.
계정을 선택하고 안내된 설치 단계를 따릅니다.
다른 방식으로 통합을 설치해야 하는 경우 Elasticsearch monitoring integration [Elasticsearch 모니터링 통합을] 참조하십시오.
합성 모니터링 설정
당사의 합성 모니터는 다양한 위치에서 앱을 테스트하고 서버 가동 중지 시간을 캡처합니다. Magento 비즈니스 인사이트 대시보드에서 이 데이터를 볼 수 있습니다.
합성 모니터를 설정하려면 가이드 설치의 단계를 따르십시오.
Flex 통합 생성
맞춤형 Flex 통합을 통해 앱 데이터베이스의 쿼리를 통해 비즈니스 메트릭을 캡처할 수 있습니다.
Flex 통합을 생성하려면:
nri-flex
구성 파일을 만듭니다.- 구성 파일 경로:
/etc/newrelic-infra/integrations.d/
- 구성 파일 이름:
mysql-database-config.yml
- 구성 파일 경로:
구성 파일에 다음 코드 조각을 추가합니다.
USERNAME
,PASSWORD
및DATABASE_NAME
교체를 변경해야 합니다.# NOTE: 'database' is an experimental API at this time# ref: https://github.com/newrelic/nri-flex/blob/master/docs/experimental/db.md---integrations:- name: nri-flex# interval: 30sconfig:name: MySQLDbFlexapis:- database: mysql# connection string for an rds mysql instance. Be sure to use the writer endpoint here.# /sys is the default database. newrelic:Password is the user:pass.db_conn: USERNAME:PASSWORD@tcp(localhost:3306)/DATABASE_NAMElogging:open: true# custom_attributes: # applies to all queries# host: CustomMagentoMySQL # custom host name atributedb_async: truedb_queries:- name: MYSQLSalesOrderDetailsrun: SELECT status AS 'status', entity_id AS 'order_id' FROM sales_order;- name: MySQLSalesOrderCumulativerun: SELECT AVG(grand_total) AS 'average_grand_total', SUM(grand_total) AS 'grand_total_sum', SUM(total_item_count) AS 'total_order_item_count' FROM sales_order;- name: MySQLSalesOrderByStatusrun: SELECT status AS 'order_status', COUNT(increment_id) AS 'total_orders', (SUM(grand_total)) AS 'total_billed_amount_by_status' FROM sales_order GROUP BY status;- name: MYSQLSalesOrderByCustomerGrouprun: SELECT AVG(salesOrder.grand_total) AS 'grand_total_average_of_all_orders', customerGroup.customer_group_code AS 'customer_group_code' FROM `sales_order` salesOrder JOIN `customer_group` customerGroup ON salesOrder.customer_group_id = customerGroup.customer_group_id GROUP BY salesOrder.customer_group_id;- name: MYSQLSalesOrderByProductrun: SELECT items.order_id AS 'Order ID', items.created_at AS 'Order Created Date', orders.status AS 'Order Status', items.name AS 'productName', items.sku AS ProductSearchcode, orders.total_item_count AS 'Order Quantity', orders.grand_total AS 'Grand Total' FROM sales_order AS orders JOIN sales_order_item AS items ON items.order_id = orders.entity_id;- name: MYSQLSalesOrderByCategoryrun: SELECT items.name AS 'Category', AVG(orders.grand_total) AS 'average_order_total' FROM sales_order AS orders JOIN sales_order_item AS items ON items.order_id = orders.entity_id GROUP BY items.name;- name: MYSQLSalesOrderByRegionrun: SELECT soa.country_id, soa.region_id, dcrn.name 'Region Name', so.entity_id AS 'Order ID', so.grand_total FROM sales_order_address soa JOIN directory_country_region_name dcrn JOIN sales_order so WHERE soa.region_id = dcrn.region_id AND so.entity_id = soa.parent_id;- name: MySQLSalesOrderPaymentCountrun: SELECT count(*) as CountOfOrderByMethod, method as PaymentMethodType FROM `sales_order_payment` group by method;- name: MYSQLAbandonedCartsrun: SELECT customer_email, items_count AS 'Products', items_qty AS 'Quantity', subtotal FROM `quote` WHERE customer_email IS NOT NULL AND reserved_order_id IS NULL AND subtotal != 0.0000;- name: MYSQLCustomerEntityRegisteredUsersrun: SELECT count(*) AS 'Registered Accounts' FROM `customer_entity`;- name: MYSQLUnregisteredCustomersrun: SELECT customer_email FROM sales_order WHERE customer_is_guest = 1 GROUP BY customer_email;- name: MYSQLSalesOrderByUnregisteredCustomersSummaryrun: SELECT COUNT(entity_id) AS 'Total Order Ids', SUM(grand_total) AS 'Grand Total Sum' FROM sales_order WHERE customer_is_guest = 1;- name: MYSQLCustomerEntityActiveUsersrun: SELECT count(is_active) AS 'Active Users' FROM `customer_entity` WHERE is_active = 1;- name: MYSQLReturningCustomersrun: WITH ctel1 AS (SELECT COUNT(entity_id) AS 'numberOfOrders', customer_email AS 'customerEmail' FROM sales_order GROUP BY customer_email) SELECT count(*) AS 'returningCustomers' FROM ctel1 WHERE numberOfOrders > 1;- name: MYSQLNewCustomersrun: SELECT COUNT(DISTINCT email) AS 'newCustomers' FROM customer_entity WHERE MONTH(created_at) >= MONTH(CURRENT_DATE() - INTERVAL 1 MONTH);- name: MYSQLBestSellersDailyrun: SELECT SUM(qty_ordered) as 'QuantityOrdered', product_name FROM sales_bestsellers_aggregated_daily GROUP BY product_id, product_name ORDER BY QuantityOrdered DESC;- name: MYSQLRevenuePerMonthAndYearrun: SELECT SUM(grand_total) AS 'Total Revenue', AVG(grand_total) AS 'Average Revenue', YEAR(created_at) AS 'Year', MONTH(created_at) AS 'Month' FROM sales_order WHERE status = 'complete' GROUP BY YEAR(created_at), MONTH(created_at);- name: MYSQLMostViewedProductsDailyrun: SELECT SUM(views_num) as 'View Count', product_name, product_id FROM report_viewed_product_aggregated_daily GROUP BY product_name, product_id ORDER BY View Count DESC;- name: MYSQLConversionRaterun: WITH cte1 AS (SELECT soi.product_id AS 'SalesProductId', soi.name AS 'ProductName', COUNT(soi.order_id) AS 'Total Orders' FROM `sales_order_item` soi group by soi.product_id, soi.name), cte2 AS (SELECT viewed.product_id AS 'ProductID', COUNT(viewed.product_id) AS 'Total Views' FROM `report_viewed_product_index` viewed group by viewed.product_id) SELECT SalesProductId as 'ProductID', ProductName, Total Views, Total Orders, Total Orders / Total Views * 100 as 'Conversion Rate In Percent' FROM cte1 JOIN cte2 WHERE cte1.SalesProductId = cte2.ProductID;- name: MYSQLTopTenSalesOrdersByValuerun: SELECT entity_id AS 'Order ID', total_item_count AS 'Order Quantity', created_at AS 'Created Date', grand_total AS 'Grand Total' FROM sales_order ORDER BY grand_total DESC LIMIT 10;- name: MYSQLOrdersAveragerun: SELECT AVG(order_count) AS 'Average Number Of Orders', Year AS 'Year' FROM (SELECT YEAR(created_at) AS 'Year', COUNT(DISTINCT order_id) AS order_count FROM sales_order_item GROUP BY MONTH(created_at), YEAR(created_at)) subquery GROUP BY Year;- name: MYSQLWishlistProductsrun: SELECT w.product_id, p.value AS 'Product Name', SUM(w.qty) AS 'Wishlist Count' FROM wishlist_item as w LEFT JOIN catalog_product_entity_varchar as p ON p.entity_id = w.product_id WHERE attribute_id = 73 GROUP BY w.product_id, p.value ORDER BY 'Wishlist Count' DESC;- name: MYSQLProductPageViewWithNoInventoryrun: SELECT v.product_id, v.product_name, v.views_num AS 'Page Views', i.qty AS 'Inventory Quantity' FROM report_viewed_product_aggregated_daily AS v LEFT JOIN cataloginventory_stock_item i ON i.product_id = v.product_id WHERE i.qty = 0 ORDER BY v.views_num DESC;- name: MYSQLHighestRestockAlertsrun: SELECT p.value as Product Name, p.entity_id as Product ID, count(a.alert_stock_id) as Restock Alert Count FROM `product_alert_stock` AS a, `catalog_product_entity_varchar` as p where a.product_id = p.value_id GROUP BY p.value, product_id order by 2 desc;- name: MYSQLSlowMovingProductsrun: SELECT cpev.entity_id as Product ID, cpev.value as Product Name, sum(isi.quantity) as Quantity from inventory_source_item as isi join catalog_product_entity as cpe on isi.sku = cpe.sku join catalog_product_entity_varchar as cpev on cpe.entity_id = cpev.entity_id where cpev.attribute_id = 73 group by Product ID, Product Name order by Quantity desc;- name: MYSQLAccountWithSmallTransactionrun: SELECT sum(grand_total) as Grand Total, customer_email FROM sales_order group by customer_email order by Grand Total ASC LIMIT 10;- name: MYSQLProfitableCustomersrun: select sum(grand_total) as Grand Total, customer_email from sales_order group by customer_email order by Grand Total desc LIMIT 10;- name: MYSQLRevenueLostDueToDiscountsrun: SELECT SUM(base_discount_amount) as 'Due to Discounts Revenue Loss' FROM `sales_order` WHERE `status` = 'complete';- name: MYSQLTotalSalesCountDueToDiscountsrun: SELECT count(base_discount_amount) as 'Due to Discounts Total Sales Count' FROM `sales_order` WHERE `status` = 'complete';- name: MYSQLProdCartAbandonmentrun: Select c.value as Product Name, sum(q.items_count) as Abandoned Products Count from quote as q join catalog_product_entity_varchar as c on q.entity_id = c.entity_id WHERE customer_email IS NOT NULL AND reserved_order_id IS NULL AND subtotal != 0.0000 AND attribute_id = 73 group by Product Name order by Abandoned Products Count;- name: MYSQLPaymentMethodChangedFrequentlyrun: SELECT o.customer_id, o.customer_email, o.customer_is_guest, COUNT(DISTINCT p.method) AS transaction_count FROM sales_order AS o JOIN sales_order_payment AS p ON o.entity_id = p.parent_id GROUP BY o.customer_id, o.customer_email, o.customer_is_guest HAVING COUNT(DISTINCT p.method) > 1 ORDER BY transaction_count DESC LIMIT 10;- name: MYSQLCustomerAddressChangingrun: SELECT c.entity_id AS customer_id, c.email, COUNT(DISTINCT a.entity_id) AS address_count FROM customer_address_entity AS a JOIN customer_entity AS c ON a.parent_id = c.entity_id GROUP BY c.entity_id, c.email HAVING COUNT(DISTINCT a.entity_id) > 1 ORDER BY address_count DESC;- name: MYSQLCustomerPurchaseSameProdrun: select COUNT(soi.product_id) AS purchase_count, soi.product_id, soi.name as 'Product Name', so.customer_email from sales_order_item as soi join sales_order as so on soi.order_id = so.entity_id group by so.customer_email, soi.product_id, soi.name HAVING COUNT(soi.product_id) > 1 ORDER BY purchase_count DESC;- name: MYSQLProductReturnedrun: SELECT soi.product_id, count(soi.product_id) as 'Returned Product Count' FROM `sales_order` as o join `sales_order_item` as soi ON o.entity_id = soi.order_id where o.status = 'closed' and o.total_refunded is not null GROUP BY soi.product_id HAVING COUNT(soi.product_id) > 1;
인프라 에이전트 다시 시작
데이터 읽기를 시작하기 전에 인프라 에이전트 문서 의 지침을 사용하여 인프라 에이전트를 다시 시작하십시오.
Magento 비즈니스 인사이트 대시보드 설치
one.newrelic.com > Integrations & Agents > Dashboards
으)로 이동합니다.
검색창에 "Magento 비즈니스 인사이트"를 입력합니다. 대시보드가 나타납니다.
그것을 클릭하여 설치하십시오.
귀하의 Magento 대시보드는 맞춤형 대시보드로 간주되며 Dashboards UI 에서 찾을 수 있습니다. 대시보드 사용 및 편집에 대한 자세한 내용은 대시보드 문서 를 참조하세요.
Magento 데이터 쿼리
Magento 앱 데이터 쿼리에 관심이 있으십니까? 다음은 Magento 플랫폼에 등록된 총 고객 수를 확인하는 NRQL 쿼리의 예입니다.
SELECT LATEST(`Registered Accounts`) AS 'Registered Accounts' FROM MYSQLCustomerEntityRegisteredUsers
다음은 뭐지?
데이터 쿼리 및 맞춤형 대시보드 생성에 대해 자세히 알아보려면 다음 문서를 확인하세요.