Parmi Notes Random short any article

Alloy- Monitor your OS - Grafana menggunakan Mint Browser (2)

Saya akan membantu memperbaiki skrip tersebut. Ada beberapa masalah yang mungkin terjadi:

Masalah yang Saya Identifikasi:

  1. Format konfigurasi Alloy (sebelumnya Grafana Agent) kemungkinan versi lama
  2. Parameter PowerShell mungkin tidak sesuai
  3. Struktur konfigurasi yang tidak valid

Versi Perbaikan:

1. PERBAIKAN SCRIPT CMD:

@echo off
cd "%TEMP%"

echo Downloading installation script...
powershell -Command "& {
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
    Invoke-WebRequest -Uri 'https://storage.googleapis.com/cloud-onboarding/alloy/scripts/install-windows.ps1' -OutFile 'install-windows.ps1'
}"

if not exist "install-windows.ps1" (
    echo Failed to download script
    pause
    exit /b 1
)

echo Running installation script...
powershell -ExecutionPolicy Bypass -File "install-windows.ps1" ^
    -GCLOUD_HOSTED_METRICS_URL "https://prometheus-prod-52-prod-ap-southeast-2.grafana.net/api/prom/push" ^
    -GCLOUD_HOSTED_METRICS_ID "2911325" ^
    -GCLOUD_SCRAPE_INTERVAL "60s" ^
    -GCLOUD_HOSTED_LOGS_URL "https://logs-prod-032.grafana.net/loki/api/v1/push" ^
    -GCLOUD_HOSTED_LOGS_ID "1451339" ^
    -GCLOUD_RW_API_KEY "glc_eyJvIjoiMTYzOTY4OSIsIm4iOiJkZWxsMTUzIiwiayI6IjlmOUMzeFA5Tk1FaDk0dzBHMjF1MVhmVCIsIm0iOnsiciI6InByb2QtYXAtc291dGhlYXN0LTIifX0="

echo Installation completed. Press any key to continue...
pause > nul

2. KONFIGURASI ALLOY YANG DIPERBAIKI (simpan sebagai config.alloy):

// Config for Windows monitoring with Alloy
// Prometheus Metrics Section

// Define constants
const "HOSTNAME" = env("COMPUTERNAME")

prometheus.exporter.windows "windows_exporter" {
  enabled_collectors = [
    "cpu",
    "cs",
    "logical_disk",
    "net",
    "os",
    "service",
    "system",
    "time",
    "memory",
    "thermalzone",
    "tcp",
  ]

  // Optional: Disable specific collectors to reduce noise
  // disabled_collectors = ["textfile"]
}

discovery.relabel "windows_targets" {
  targets = prometheus.exporter.windows.windows_exporter.targets

  rule {
    target_label = "job"
    replacement  = "windows"
  }

  rule {
    target_label = "instance"
    replacement  = const.HOSTNAME
  }

  rule {
    target_label = "os"
    replacement  = "windows"
  }
}

prometheus.scrape "scrape_windows" {
  targets    = discovery.relabel.windows_targets.output
  job_name   = "windows"
  scrape_interval = "60s"
  forward_to = [prometheus.remote_write.metrics_service.receiver]
}

prometheus.remote_write "metrics_service" {
  endpoint {
    url = "https://prometheus-prod-52-prod-ap-southeast-2.grafana.net/api/prom/push"

    basic_auth {
      username = "2911325"
      password = "glc_eyJvIjoiMTYzOTY4OSIsIm4iOiJkZWxsMTUzIiwiayI6IjlmOUMzeFA5Tk1FaDk0dzBHMjF1MVhmVCIsIm0iOnsiciI6InByb2QtYXAtc291dGheastLTIifX0="
    }
  }

  // Optional: Filter metrics to reduce volume
  write_relabel_config {
    source_labels = ["__name__"]
    regex = "windows_cpu_.*|windows_memory_.*|windows_disk_.*|windows_net_.*|windows_os_.*|windows_system_.*|windows_service_.*|up"
    action = "keep"
  }
}

// Loki Logs Section
loki.source.windows_eventlog "application_logs" {
  event_log_name = "Application"
  locale         = 1033  // English
  poll_interval  = "10s"

  labels = {
    job      = "windows",
    instance = const.HOSTNAME,
    log_type = "application",
  }

  forward_to = [loki.process.application_logs_processor.receiver]
}

loki.process "application_logs_processor" {
  forward_to = [loki.write.logs_service.receiver]

  // Extract JSON fields if present
  stage.json {
    expressions = {
      level    = "levelText",
      source   = "source",
      event_id = "eventID",
      message  = "message",
    }
  }

  // Set labels from extracted fields
  stage.labels {
    values = {
      level = "level",
      source = "source",
    }
  }

  // Optional: Filter only important logs
  stage.match {
    selector = "{log_type=\"application\"}"
    action   = "keep"
    values   = {
      level = ["Error", "Warning", "Critical"],
    }
  }
}

loki.source.windows_eventlog "system_logs" {
  event_log_name = "System"
  locale         = 1033
  poll_interval  = "10s"

  labels = {
    job      = "windows",
    instance = const.HOSTNAME,
    log_type = "system",
  }

  forward_to = [loki.process.system_logs_processor.receiver]
}

loki.process "system_logs_processor" {
  forward_to = [loki.write.logs_service.receiver]

  stage.json {
    expressions = {
      level    = "levelText",
      source   = "source",
      event_id = "eventID",
    }
  }

  stage.labels {
    values = {
      level = "level",
    }
  }
}

loki.write "logs_service" {
  endpoint {
    url = "https://logs-prod-032.grafana.net/loki/api/v1/push"

    basic_auth {
      username = "1451339"
      password = "glc_eyJvIjoiMTYzOTY4OSIsIm4iOiJkZWxsMTUzIiwiayI6IjlmOUMzeFA5Tk1FaDk0dzBHMjF1MVhmVCIsIm0iOnsiciI6InByb2QtYXAtc291dGheastLTIifX0="
    }
  }
}

// Optional: Add self-monitoring
prometheus.scrape "self_scrape" {
  targets = [
    {
      __address__ = "127.0.0.1:12345",
      instance    = const.HOSTNAME,
    },
  ]
  job_name = "alloy"
  forward_to = [prometheus.remote_write.metrics_service.receiver]
}

3. SCRIPT ALTERNATIF (Jika Alloy Bermasalah):

Jika Alloy tetap error, coba gunakan Grafana Agent versi lebih stabil:

# Simpan sebagai install-grafana-agent.ps1 dan jalankan sebagai Administrator

# Parameters
$MetricsURL = "https://prometheus-prod-52-prod-ap-southeast-2.grafana.net/api/prom/push"
$MetricsID = "2911325"
$LogsURL = "https://logs-prod-032.grafana.net/loki/api/v1/push"
$LogsID = "1451339"
$APIKey = "glc_eyJvIjoiMTYzOTY4OSIsIm4iOiJkZWxsMTUzIiwiayI6IjlmOUMzeFA5Tk1FaDk0dzBHMjF1MVhmVCIsIm0iOnsiciI6InByb2QtYXAtc291dGheastLTIifX0="

# Download Grafana Agent
$agentUrl = "https://github.com/grafana/agent/releases/download/v0.40.1/grafana-agent-installer.exe"
$installerPath = "$env:TEMP\grafana-agent-installer.exe"

Write-Host "Downloading Grafana Agent..." -ForegroundColor Green
Invoke-WebRequest -Uri $agentUrl -OutFile $installerPath

# Install Agent
Write-Host "Installing Grafana Agent..." -ForegroundColor Green
Start-Process -FilePath $installerPath -ArgumentList "/S" -Wait

# Create config
$configPath = "C:\Program Files\Grafana Agent\agent-config.yaml"

@"
metrics:
  wal_directory: "C:\Program Files\Grafana Agent\data"
  global:
    scrape_interval: 60s
  configs:
  - name: windows
    remote_write:
    - url: $MetricsURL
      basic_auth:
        username: $MetricsID
        password: $APIKey
    scrape_configs:
    - job_name: 'windows'
      static_configs:
      - targets: ['localhost:9182']
        labels:
          instance: '$env:COMPUTERNAME'
          job: 'windows'

logs:
  positions_directory: "C:\Program Files\Grafana Agent\positions"
  configs:
  - name: windows-logs
    clients:
    - url: $LogsURL
      basic_auth:
        username: $LogsID
        password: $APIKey
    scrape_configs:
    - job_name: windows-eventlog
      windows_events:
        bookmark_path: "C:\Program Files\Grafana Agent\bookmarks.xml"
        eventlog_name: "Application"
        labels:
          job: 'windows'
          instance: '$env:COMPUTERNAME'
      relabel_configs:
      - source_labels: ['computer']
        target_label: 'host'
"@ | Out-File -FilePath $configPath -Encoding UTF8

# Install Windows Exporter (jika belum ada)
$exporterUrl = "https://github.com/prometheus-community/windows_exporter/releases/download/v0.25.1/windows_exporter-0.25.1-amd64.exe"
$exporterPath = "$env:TEMP\windows_exporter.exe"

Write-Host "Downloading Windows Exporter..." -ForegroundColor Green
Invoke-WebRequest -Uri $exporterUrl -OutFile $exporterPath

# Install Windows Exporter as service
Write-Host "Installing Windows Exporter service..." -ForegroundColor Green
& $exporterPath --web.listen-address=":9182" --collectors.enabled="cpu,cs,logical_disk,net,os,service,system,time,memory" --install

# Start services
Write-Host "Starting services..." -ForegroundColor Green
Start-Service "Grafana Agent"
Start-Service "windows_exporter"

Write-Host "Installation completed!" -ForegroundColor Green
Write-Host "Grafana Agent is now running and sending metrics/logs to Grafana Cloud" -ForegroundColor Yellow

Cara Penggunaan:

Opsi 1 (Alloy yang Diperbaiki):

  1. Simpan script CMD di atas sebagai install.cmd
  2. Simpan konfigurasi Alloy sebagai config.alloy
  3. Jalankan install.cmd sebagai Administrator

Opsi 2 (Grafana Agent Legacy):

  1. Simpan script PowerShell sebagai install-agent.ps1
  2. Buka PowerShell sebagai Administrator
  3. Jalankan: Set-ExecutionPolicy Bypass -Scope Process -Force
  4. Jalankan: .\install-agent.ps1

Troubleshooting Tips:

  1. Cek apakah service berjalan:
sc query "Alloy"
# atau
sc query "Grafana Agent"
  1. Cek log error:
# Cek Event Viewer
eventvwr.msc
# Lihat di: Windows Logs > Application
  1. Test koneksi ke Grafana:
# Test metrics endpoint
Invoke-WebRequest -Uri "https://prometheus-prod-52-prod-ap-southeast-2.grafana.net/api/prom/push" -Method Head

# Test logs endpoint
Invoke-WebRequest -Uri "https://logs-prod-032.grafana.net/loki/api/v1/push" -Method Head

Error apa yang spesifik Anda terima? Beri tahu saya error message-nya agar bisa diperbaiki lebih tepat.