> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Puma

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Ruby", version: "3.0.7" },
{ name: "Puma", version: "3.11.4" }
]}
/>

[Puma](http://puma.io/) is gebouwd voor snelheid en parallellisme. Puma is een kleine bibliotheek die een snelle en gelijktijdige HTTP 1.1-server biedt voor Ruby-webapplicaties.

De AppSignal Ruby-gem voegt automatisch een listener in de Puma-server in; er is geen handmatige configuratie nodig.

## Puma-metrieken-plugin

De AppSignal Puma-plugin [verzamelt metrieken over hoe Puma functioneert](#metrics). Wanneer AppSignal Puma-metrieken detecteert, maakt het een [Magic Dashboard](#magic-dashboard) aan, waardoor u kerncijfers visueel kunt monitoren.

Om de metriekverzameling in te schakelen, voegt u de AppSignal-plugin toe aan uw Puma-configuratie:

<CodeGroup>
  ```ruby Ruby theme={null}
  # puma.rb (or config/puma.rb)
  plugin :appsignal
  ```
</CodeGroup>

<Tip>
  De StatsD-server die bij de AppSignal Agent wordt geleverd, moet actief zijn
  om de Puma-metrieken-plugin te laten werken. Zorg ervoor dat [de
  `enable_statsd`-configuratieoptie](/ruby/configuration/options#option-enable_statsd)
  niet op `false` staat.
</Tip>

Puma kan extra configuratie nodig hebben om de [secrets](#configuration-secrets) van uw applicatie te laden, die nodig kunnen zijn om AppSignal te kunnen starten.

## Gebruik met `prune_bundler`

Als uw `puma.rb`-bestand `prune_bundler` bevat, moet u AppSignal als runtime-afhankelijkheid toevoegen.

<Tip>
  Om Puma met `prune_bundler` te gebruiken, is Puma versie 4.2.0 of hoger
  vereist.
</Tip>

<CodeGroup>
  ```ruby Ruby theme={null}
  # puma.rb (or config/puma.rb)
  prune_bundler

  plugin :appsignal
  extra_runtime_dependencies ["appsignal"]
  ```
</CodeGroup>

## Gebruik met `preload_app!`

Als uw `puma.rb`-bestand `preload_app!` bevat, is enige configuratie nodig om metrieken van [minutely probes](/ruby/instrumentation/minutely-probes) correct te rapporteren. Wanneer `preload_app!` true is, worden de minutely probes uitgevoerd in het Puma-hoofdproces. In het hoofdproces hebben de probes geen toegang tot dezelfde gegevens als de app in de Puma-workers, waardoor er onnauwkeurige of geen gegevens worden gerapporteerd.

In het `puma.rb`-configuratiebestand van Puma stopt u de AppSignal minutely probes in de `before_fork`-callback om de minutely probes in het Puma-hoofdproces te stoppen. Start vervolgens de minutely probes in het workerproces vanuit de `on_worker_boot`-callback.

<CodeGroup>
  ```ruby Ruby theme={null}
  # puma.rb or config/puma.rb

  # When preload_app! is set
  preload_app!


  # Add this before_fork callback to stop the minutely probes in the Puma main process
  before_fork do
    Appsignal::Probes.stop
  end

  # Add this on_worker_boot callback to start the minutely probes in the Puma worker processes
  on_worker_boot do
    Appsignal::Probes.start
  end
  ```
</CodeGroup>

## Secrets

Als u een bibliotheek zoals [Rails](https://guides.rubyonrails.org/security.html#custom-credentials) of [dotenv](https://github.com/bkeepers/dotenv) gebruikt om de secrets van uw app te beheren en AppSignal te configureren, moet u deze in uw Puma-configuratie laden.

AppSignal voert een achtergrondproces uit in het hoofdproces van Puma bij gebruik van de Puma-plugin. De rest van uw app wordt standaard niet geladen in het hoofdproces van Puma (tenzij u `preload_app!` gebruikt, wat mogelijk niet geschikt is voor uw app). Zonder aanvullende configuratie zal de AppSignal-config niet laden, en zal AppSignal niet starten.

Er is geen "on boot"-hook beschikbaar in Puma om uw extra config in het hoofdproces te laden. Om uw configuratie te laden, voegt u deze toe aan de root van uw `puma.rb`-configuratiebestand, zoals in het onderstaande voorbeeld.

<CodeGroup>
  ```ruby Ruby theme={null}
  # puma.rb (or config/puma.rb)
  plugin :appsignal # Add this plugin

  # Rails secrets
  # Add this line when using Rails secrets in your `config/appsignal.rb` or `config/appsignal.yml` file.
  require "rails"

  # Add this section when using dotenv for secrets management
  require "dotenv"
  Dotenv.load
  # or for Rails apps:
  require "dotenv/load"
  Dotenv.load


  # Rest of your Puma config...
  ```
</CodeGroup>

### Hostname {/* id: minutely-probe-configuration-hostname */}

Deze probe luistert naar de [`APPSIGNAL_HOSTNAME`-configuratieoptie vanuit de
omgevingsvariabele](/ruby/configuration/options#option-hostname) voor de hostname-tag
die aan al zijn metrieken wordt toegevoegd. Als er geen is ingesteld, probeert deze
deze automatisch te detecteren. Gebruik de systeemomgevingsvariabele
`APPSIGNAL_HOSTNAME` om de hostname in te stellen als u de gedetecteerde hostname
wilt wijzigen.

### StatsD-poort

Deze probe luistert naar de [`APPSIGNAL_STATSD_PORT`-configuratieoptie vanuit de omgevingsvariabele](/ruby/configuration/options#option-statsd_port) voor de configuratie van niet-standaard StatsD-poorten. Als de omgevingsvariabele niet is ingesteld, is de standaardwaarde 8125. Voor het Puma-hoofdproces is het verplicht om de omgevingsvariabele te gebruiken; het zal de AppSignal-bestandsconfiguratie niet inlezen.

## Phased restart {/* id: minutely-probe-phased-restart */}

[Phased restarts](https://github.com/puma/puma/blob/master/docs/restart.md) van Puma
herstarten het Puma-hoofdproces niet, wat betekent dat het AppSignal-achtergrondproces
ook niet wordt herstart bij een phased restart. Als u wijzigingen in de
AppSignal-config heeft aangebracht, moet u uw Puma-app daarna volledig herstarten om
de configuratiewijziging van kracht te laten worden.

<CodeGroup>
  ```sh Shell theme={null}
  # After changing the AppSignal config, restart using:
  pumactl restart
  # instead of: pumactl phased-restart
  ```
</CodeGroup>

## Magic dashboard

Wanneer AppSignal Puma-metrieken ontvangt, wordt er een Puma magic dashboard aangemaakt, beschikbaar in de dashboardsectie van de AppSignal-app.

Het Puma magic dashboard bevat de volgende grafieken:

| Grafiek                                         | Metrieken                 | Tags                                            |
| ----------------------------------------------- | ------------------------- | ----------------------------------------------- |
| [Connection backlog](#connection-backlog-graph) | `puma_connection_backlog` | `hostname`                                      |
| [Pool capacity](#pool-capacity-graph)           | `puma_pool_capacity`      | `hostname`                                      |
| [Threads](#threads-graph)                       | `puma_threads`            | <li>`max`</li><li>`running`</li>                |
| [Worker info](#worker-info-graph)               | `puma_workers`            | <li>`booted`</li><li>`count`</li><li>`old`</li> |

Tags geven u een contextueel overzicht van prestatie-informatie van Active job. AppSignal rapporteert de volgende tags voor Active Job-jobs:

| Naam       | Beschrijving                                                                                                                                               |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `booted`   | Totaal aantal momenteel gestarte workers voor deze server.                                                                                                 |
| `count`    | Aantal momenteel actieve threads voor deze server.                                                                                                         |
| `hostname` | Naam van de host waarvan de metriek is gerapporteerd.                                                                                                      |
| `max`      | Maximaal aantal geconfigureerde threads voor deze server.                                                                                                  |
| `old`      | Aantal workers dat op het meetmoment de vorige configuratie/code van de server draait. Puma zal deze uitfaseren naarmate er nieuwe workers worden gestart. |
| `running`  | Aantal momenteel actieve threads voor deze server                                                                                                          |

Met grafieken kunt u de metrieken van uw applicatie visueel monitoren. U kunt markeringen aan grafieken toevoegen en op elk gegevenspunt klikken om inzicht te krijgen in de staat van uw applicatie op dat moment.

<img src="https://mintcdn.com/appsignal-715f5a51/4TRZP0Sq9Zq7PAPW/assets/images/screenshots/ruby/integrations/puma/dashboard-graphs.png?fit=max&auto=format&n=4TRZP0Sq9Zq7PAPW&q=85&s=b9c868a34aedc2a6ee3f1e870c0e97c8" alt="Example Puma magic dashboard" width="1432" height="672" data-path="assets/images/screenshots/ruby/integrations/puma/dashboard-graphs.png" />

### Connection backlog-grafiek

De Connection backlog-grafiek toont het aantal inkomende verbindingen met de server dat in de backlog-wachtrij van de server wacht om bediend te worden.

U kunt de Connection backlog-grafiek gebruiken om te monitoren hoeveel requests wachten om afgehandeld te worden en Puma-bottlenecks op te sporen.

### Pool capacity-grafiek

De Pool capacity-grafiek toont het aantal Puma-threads dat beschikbaar is om requests te ontvangen, inclusief Puma-threads die nog gespawned moeten worden.

U kunt de Pool capacity-grafiek gebruiken om de beschikbaarheid van Puma-threads te monitoren en workers te optimaliseren.

### Threads-grafiek

De Threads-grafiek toont informatie over de threads die door Puma worden gespawned om web requests te verwerken, geaggregeerd over alle Puma-workers. Om web requests te verwerken, spawn Puma meer threads wanneer nodig. De grafiek toont het aantal actieve threads ten opzichte van het maximaal beschikbare aantal threads.

U kunt de Threads-grafiek gebruiken om de vraag en aanbod van Puma-threads te monitoren en workers te optimaliseren.

### Worker info-grafiek

De Worker info-grafiek toont hoeveel Puma-workers er actief zijn en welke versie van uw website ze gebruiken. De count-lijn toont hoeveel workers er in totaal actief zijn, terwijl de booted- en old-lijnen tonen hoeveel workers de nieuwe versie en hoeveel workers de oude versie van uw applicatie gebruiken.

U kunt de Worker info-grafiek gebruiken om de status en prestaties van uw Puma-workers te monitoren en te zien hoeveel workers er op een verouderde configuratie van uw applicatie draaien.

[thread pool]: https://github.com/puma/puma/#thread-pool

[clustered mode]: https://github.com/puma/puma/#clustered-mode
