first off, you’ll need plugins which provide performance data which can be parsed as metrics. Then obviously a host and service object which makes Icinga execute the command/plugin.
The metrics are written to all writers when the feature is enabled, meaning to say, InfluxDB receives and stores them automatically. Same goes for Graphite where the Carbon Cache daemon listens for metrics.
In order to visualize stored data, you need a frontend. For InfluxDB, this only is Grafana, for Graphite you can use Grafana or Graphite-Web.
Each of these frontends requires templates and dashboards to present something to the user. Especially when you want different colors, data point calculations (log instead of avg, etc.) you need to create such templates.
The Grafana module for Icinga Web 2 puts the glue between web knowing about the host/service/command and the Grafana frontend showing the graphs. In order to work properly, it needs the provide base-metrics and icinga2 dashboards - or your own custom made “templates”.
The Graphite module for Icinga Web 2 moves the template part into the module itself, and only queries the Graphite Web Render API to fetch the graphs then. The templates are organized in config ini files, and allow to calculate things, draw lines differently, filly slopes, and so on. Graphite Web just needs to be accessible.
Depending on where you want to maintain the templates/dashboards, choose either one of these. We as Icinga prefer Graphite which is why we’ve created the official module. Nonetheless, @Carsten does a magnificent job on his community module, so test-drive both I’d say. Our community uses both, so your chance of getting support is very high.
PNP is something I won’t recommend, as the project itself is not actively maintained anymore. The corresponding module on our GitHub repo is also considered stale.
That being said, you can also test-drive Graphite and InfluxDB/Grafana inside the Vagrant boxes “standalone” and “influxdb” where everything comes pre-installed. This allows you to add a new plugin, command, host, service object and see how the graphs are created and integrated automatically.