Skip to content

APM Server Sozlash

apm-setup

Diqqat!

Application Performance Monitoring (APM) zamonaviy dasturiy ta'minotni ishlab chiqish va IT operatsiyalarining hal qiluvchi jihati hisoblanadi. APM dasturiy ta'minot ilovalarining ishlashi, mavjudligi(availability) va user experienceni kuzatish va boshqarish uchun toollar va amaliyotlardan foydalanishni o'z ichiga oladi. U applicationlarning qanday ishlashini ko'rish imkonini beradi, ishlash muammolari, qiyinchiliklar va anomaliyalarni aniqlash va hal qilishga yordam beradi. APM'ning maqsadi optimal ishlash va ishonchlilikni saqlab qolish orqali applicationlarning foydalanuvchi kutganlari va biznes talablariga javob berishini ta'minlashdan iborat.

APM bir nechta maqsadlar qo'llaniladi.

  • Performance Monitoring-> Applicationlarning ishlash metrikalarini(metrics), jumladan response timelari, o'tkazish qobiliyati(throughput) va resurslardan foydalanishni doimiy ravishda kuzatib boradi. Bu samaradorlikning pasayishini aniqlashga va applicationlarning samarali ishlashini ta'minlashga yordam beradi.

  • Error Tracking-> Applicationlardagi xatolar(error) va exceptionlarni aniqlaydi va logga yozadi, ildiz sabablari haqida tushuncha beradi va tezkor hal qilish imkonini beradi.

  • User Experience Monitoring-> Sahifani yuklash vaqtlari(page load time), tranzaksiya vaqtlari va foydalanuvchilarning o'zaro ta'siri kabi metrikalarni kuzatish orqali end-user experienceni nazorat qiladi. Bu foydalanuvchilar dasturning ishlashini qanday qabul qilishini tushunishga yordam beradi.

  • Transaction Tracing-> Foydalanuvchi interfeysidan(user interface) tortib to backend servicelari va ma'lumotlar bazalarigacha bo'lgan applicationlar stackidagi tranzaktsiyalar yo'lini kuzatib boradi. Bu kechikishlar yoki nosozliklar sodir bo'lgan joyni aniqlashga yordam beradi.

  • Infrastructure Monitoring-> Serverlar, ma'lumotlar bazalari, tarmoqlar va cloud servislarini o'z ichiga olgan applicationlarni qo'llab-quvvatlovchi asosiy infratuzilmani kuzatadi. Bu infratuzilma komponentlarining yaxshi ishlashini va dastur bilan bog'liq muammolarni keltirib chiqarmasligini ta'minlaydi.

  • Analytics and Reporting-> Vaqt o'tishi bilan applicationlarning ishlash tendentsiyalari bo'yicha batafsil hisobotlar va tahlillarni taqdim etadi, bu jamoalarga ongli qarorlar qabul qilishda va kelajakdagi relizlarni yaxshilashda yordam beradi.

APM Componentlari

APM keng qamrovli monitoring yechimini ta'minlash uchun birgalikda ishlaydigan bir nechta komponentlardan iborat.

  • APM Server-> Turli agentlardan ishlash ma'lumotlarini to'playdigan va qayta ishlaydigan markaziy komponent. U ma'lumotlarni jamlaydi, saqlaydi va ma'lumotlarni so'rash va vizualizatsiya qilish uchun interfeyslarni taqdim etadi.

  • APM Agentlar-> Application serverlarida yoki applicationlar ichida o'rnatilgan lightweight software modullar. Ushbu agentlar performance datalarni to'playdi va ularni APM serveriga yuboradi. Turli xil agentlar turli dasturlash tillari va environmentlar, jumladan Java, Node.js, Python(Django, Flask), Ruby on Rails, Rack, Go, .NET, PHP va boshqalar uchun mavjud.

  • Data Collectorlar-> Logllar, tracelar va metrikalar kabi turli manbalardan ma'lumotlarni to'playdigan maxsus toollar. Ular application layerdan ham, infrastructure layeridan ham ma'lumotlarni to'plashlari mumkin.

  • User Interface (UI)-> Foydalanuvchilarga ishlash ma'lumotlarini tasavvur qilish, ogohlantirishlarni(alert) o'rnatish va tendentsiyalarni tahlil qilish imkonini beruvchi boshqaruv paneli yoki veb-interfeys. Ushbu interfeys amaliy tushunchalarni taqdim etish va muammolarni bartaraf etishni osonlashtirish uchun juda muhimdir.

  • Alerting va Notification System-> Foydalanuvchilarni ishlash muammolari yoki anomaliyalar haqida xabardor qiladigan sozlanishi mumkin bo'lgan ogohlantirishlar. Bu jamoalarning yuzaga kelishi mumkin bo'lgan muammolarga tezda javob berishini ta'minlaydi.

Ishni boshlash

Ushbu amaliyotda biz APM server o'rnatib sozlaymiz va Java, Node.js, Python(Django, Flask), Ruby on Rails, Rack, Go, .NET, PHP environmentlarda APM agentni o'rnatib sozlashni ko'rib chiqamiz.

APM ishlashi quyidagi rasmda tasvirlangan. Biz serverimizga APM Server o'rnatamiz va uni Elasticsearcha yo'naltiramiz. APM agentlarni esa har bir applicationimizga qo'shib chiqamiz. Applicationlarimiz ichidagi APM agent APM Serverga ma'lumotlarni yuborib turadi. APM Server esa uni ishlab Elasticsearchga yuboradi, Elasticsearchdan biz Kibana APM UI orqali uni vizualizatsiya qilib ko'rishimiz mumkin.

apm-setup

APM Server o'natish va solzash

Keling ELK Stack Cluster o'rnatish va sozlash (opens in a new tab) qo'llanmasidagi app-server(10.128.0.12) ga APM Server o'rnatamiz.

1-> APM Server o'rnatamiz.

curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.17.20-amd64.deb
sudo dpkg -i apm-server-7.17.20-amd64.deb

2-> APM Server apm-server.yml konfiguratsiya faylidan Elasticsearchga ulanishni kiritamiz va APM Serverga tashqaridan ulanishni yoqamiz.

sudo nano /etc/apm-server/apm-server.yml
/etc/apm-server/apm-server.yml
################################ APM Server ################################
 
apm-server:
  # Defines the host and port the server is listening on. Use "unix:/path/to.sock" to listen on a unix domain socket.
  host: "0.0.0.0:8200"
 
#-------------------------- Elasticsearch output --------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  # Scheme and port can be left out and will be set to the default (`http` and `9200`).
  # In case you specify and additional path, the scheme is required: `http://localhost:9200/path`.
  # IPv6 addresses should always be defined as: `https://[2001:db8::1]:9200`.
  hosts: ["10.128.0.9:9200"]

3-> APM Sererni ishga tushiramiz.

sudo systemctl start apm-server
sudo systemctl enable apm-server

Statusini tekshiramiz.

sudo systemctl status apm-server

4-> Kibanadan Integrations bo'limga o'tsak bizda Elastic APM chiqishi kerak.

apm-setup

Elastic APM'ga o'tib Check APM Server Status bosganimizda You have correctly setup APM Server chiqsa demak bizni APM Serverni to'gri o'rnatib sozladik. apm-setup

APM Serverni o'rnatib Elasticsearchga ulab olganimzidan keyin AMP agentlarni qo'shib chiqishimiz kerak bo'ladi. Application qaysi dasturlash tilida yozilgani qarab APM agent qo'shish o'ziga xos bo'ladi.

Node.js

Bu qismda biz Node.js loyihalarga APM agent qo'shishni ko'rib chiqamiz.

1-> Node.js loyihamizga elastic-apm-node (opens in a new tab) Node.js APM agent paketini qo'shib olamiz.

#npm bilan
npm install --save elastic-apm-node
 
#pnpm bilan
pnpm install --save elastic-apm-node

2-> package.json konfiguratsiyaga quyidagi o'zgarishlarni kiritamiz. Namuna Next.js

  "scripts": {
    "dev": "NODE_OPTIONS=--require=elastic-apm-node/start-next.js next dev",
    "build": "next build",
    "start": "NODE_OPTIONS=--require=elastic-apm-node/start-next.js next start",
    "lint": "next lint"
  },

3-> elastic-apm-node.js nomli fayl ochib olamiz APM Server manzili kiritamiz.

module.exports = {
    serverUrl: 'http://10.128.0.12:8200' 
  }

Boshqa Node.js fremworklarda ham ishlatish uchun quyidagi rasmiy qo'llanmani (opens in a new tab) ko'rib chiqishingiz mumkin.

.NET

Bu qismda biz .NET loyihalarga APM agent qo'shishni ko'rib chiqamiz.

Entity Framework Core bilan ASP.NET Core application uchun Elastic.Apm.NetCoreAll (opens in a new tab) paketini ishlatishingiz mumkin.

Minimalizm uchun faqat ASP.NET Core monitoring uchun Elastic.Apm.AspNetCore (opens in a new tab) paketini ishlatishingiz mumkin.

Faqat Entity Framework Core monitoring uchun Elastic.Apm.EntityFrameworkCore (opens in a new tab) aketini ishlatishingiz mumkin.

1-> .NET loyihamiz .csproj fayliga Elastic.Apm.NetCoreAll paketini qo'shib qo'yamiz.

<Project Sdk="Microsoft.NET.Sdk.Web">
 
  <PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
 
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.13" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
    <PackageReference Include="Elastic.Apm.NetCoreAll" Version="1.27.0" />
  </ItemGroup>
 
</Project>

2-> .NET loyiahmiz Program.cs fayliga quyidagi kodlarni qo'shamiz.

using Elastic.Apm.NetCoreAll;
var builder = WebApplication.CreateBuilder(args);
 
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
 
var app = builder.Build();
 
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
 
app.UseAuthorization();
 
app.MapControllers();
 
app.UseAllElasticApm(builder.Configuration);
 
app.Run();

4-> .NET loyihamiz appsettings.json konfiguratsiya fayliga APM Serverga ulanishni qo'shamiz. Ushbu konfiguratsiyada APM Server manzili, Environment(developement, staging, production) va service nomi yoziladi.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ElasticApm": {
    "SecretToken": "",
    "ServerUrls": "http://10.128.0.12:8200",
    "ServiceName": "github-actions-api", 
    "Environment": "development"
    }
}

Qo'shimcha uchun .NET applicationlarga APM Agent qo'shish bo'yicha rasmiy qo'llanma (opens in a new tab)

PHP

Bu qismda biz PHP loyihalarga APM agent qo'shishni ko'rib chiqamiz.

Serverimizga apm-agent-php (opens in a new tab)ni o'rnatib olamiz.

1-> Debian based serverlar uchun apm-php-agentni o'rntamiz.

sudo wget https://github.com/elastic/apm-agent-php/releases/download/v1.13.0/apm-agent-php_1.13.0_amd64.deb 
sudo dpkg -i apm-agent-php_1.13.0_amd64.deb

Redhat based serverlar uchun

sudo wget https://github.com/elastic/apm-agent-php/releases/download/v1.13.0/apm-agent-php-1.13.0-1.x86_64.rpm
sudo rpm -ivh apm-agent-php-1.13.0-1.x86_64.rpm

2-> PHP loyihamizga APM Agent ulashning bir usuli bu php.ini fayliga quyidagi konfiguratsiyani qo'shishdir.

elastic_apm.server_url=http://10.128.0.12:8200
elastic_apm.service_name="php-service"

Yoki loyiha .env fayliga qo'shish

Yana bir usuli bu export orqali qo'shish

export elastic_apm.server_url=http://10.128.0.12:8200
export elastic_apm.service_name="php-service"

Qo'shimcha uchun PHP applicationlarga APM Agent qo'shish bo'yicha rasmiy qo'llanma (opens in a new tab)

Django

Bu qismda biz Python Django loyihalarga APM agent qo'shishni ko'rib chiqamiz.

1-> Djnago loyihamizga pip orqali elastic-apm (opens in a new tab) paketini o'rnatib olamiz.

pip install elastic-apm

2-> settings.py faylimizga quyidagi konfiguratsiyalarni qo'shib chiqamiz.

# INSTALLED_APPS ga qo'shamiz
INSTALLED_APPS = [
    "django.contrib.admin",
    'elasticapm.contrib.django',
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]
 
# ELASTIC_APM config qilamiz
ELASTIC_APM = {
'SERVICE_NAME': 'python-service',
 
# 'SECRET_TOKEN': '',
 
'SERVER_URL': 'http://35.238.168.75:8200',
 
'ENVIRONMENT': 'production',
}
 
# MIDDLEWARE ga qo'shamiz
MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    'elasticapm.contrib.django.middleware.TracingMiddleware',
]

Qo'shimcha uchun Python django applicationlarga APM Agent qo'shish bo'yicha rasmiy qo'llanma (opens in a new tab)