Skip to content

Instantly share code, notes, and snippets.

@juliusknorr
Created April 11, 2025 11:24
Show Gist options
  • Save juliusknorr/39aecb974cf5dc75e21e924782b16844 to your computer and use it in GitHub Desktop.
Save juliusknorr/39aecb974cf5dc75e21e924782b16844 to your computer and use it in GitHub Desktop.
php-apcu-prometheus.php
<?php
// Simple endpoint to get apcu metrics into monitoring as a prometheus endpoint
if (!extension_loaded('apcu')) {
header('HTTP/1.1 500 Internal Server Error');
echo "Error: APCu extension not enabled\n";
exit(1);
}
$apcStats = apcu_cache_info(true);
$mem = apcu_sma_info(true);
if ($apcStats === false || $mem === false) {
header('HTTP/1.1 500 Internal Server Error');
echo "Error: APCu extension not enabled\n";
exit(1);
}
header('Content-Type: text/plain; version=0.0.4');
// Calculate memory values once to ensure consistency
$totalMemory = $mem['num_seg'] * $mem['seg_size'];
$availableMemory = $mem['avail_mem'];
$usedMemory = $totalMemory - $availableMemory;
echo "# HELP php_apc_num_slots Number of slots in APC cache\n";
echo "# TYPE php_apc_num_slots gauge\n";
echo "php_apc_num_slots " . $apcStats['num_slots'] . "\n";
echo "# HELP php_apc_num_entries Number of entries in APC cache\n";
echo "# TYPE php_apc_num_entries gauge\n";
echo "php_apc_num_entries " . $apcStats['num_entries'] . "\n";
echo "# HELP php_apc_num_hits Number of cache hits\n";
echo "# TYPE php_apc_num_hits counter\n";
echo "php_apc_num_hits " . $apcStats['num_hits'] . "\n";
echo "# HELP php_apc_num_misses Number of cache misses\n";
echo "# TYPE php_apc_num_misses counter\n";
echo "php_apc_num_misses " . $apcStats['num_misses'] . "\n";
echo "# HELP php_apc_num_inserts Number of cache inserts\n";
echo "# TYPE php_apc_num_inserts counter\n";
echo "php_apc_num_inserts " . $apcStats['num_inserts'] . "\n";
echo "# HELP php_apc_hit_ratio Ratio of cache hits to total cache operations\n";
echo "# TYPE php_apc_hit_ratio gauge\n";
echo "php_apc_hit_ratio " . ($apcStats['num_hits'] / ($apcStats['num_hits'] + $apcStats['num_misses'])) . "\n";
echo "# HELP php_apc_miss_ratio Ratio of cache misses to total cache operations\n";
echo "# TYPE php_apc_miss_ratio gauge\n";
echo "php_apc_miss_ratio " . ($apcStats['num_misses'] / ($apcStats['num_hits'] + $apcStats['num_misses'])) . "\n";
echo "# HELP php_apc_num_expunges Number of cache expunges due to cache full\n";
echo "# TYPE php_apc_num_expunges counter\n";
echo "php_apc_num_expunges " . $apcStats['expunges'] . "\n";
echo "# HELP php_apc_memory_size Total memory size allocated for APC\n";
echo "# TYPE php_apc_memory_size gauge\n";
echo "php_apc_memory_size " . $totalMemory . "\n";
echo "# HELP php_apc_memory_available Available memory in APC\n";
echo "# TYPE php_apc_memory_available gauge\n";
echo "php_apc_memory_available " . $availableMemory . "\n";
echo "# HELP php_apc_memory_used Used memory in APC\n";
echo "# TYPE php_apc_memory_used gauge\n";
echo "php_apc_memory_used " . $usedMemory . "\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment