Plugin example in doc schlägt fehl

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Plugin example in doc schlägt fehl

      Bei mir failt das example plugin: bloonix.org/de/docs/howtos/howto-develop-plugins.html


      Source Code

      1. root@example.com ~/example-bloonix-plugins/example # cat check-test
      2. #!/usr/bin/perl
      3. # Immer 'warnings' und 'strict' inkludieren.
      4. use warnings;
      5. use strict;
      6. # Das Modul Bloonix::Plugin einbinden.
      7. use Bloonix::Plugin;
      8. # Ein neues Objekt von Bloonix::Plugin erzeugen und gleichzeitig
      9. # die Versionsnummer des Plugins setzen.
      10. my $plugin = Bloonix::Plugin->new(version => "0.1");
      11. # Es sollte immer ein Beispiel angegeben werden, wie das Plugin
      12. # ausgeführt werden kann. Ruft man die Hilfe auf, so wird das in
      13. # der Ausgabe in etwa so aussehen:
      14. # check-test --url https://www.bloonix.de/ --warning 3 --critial 5
      15. $plugin->example(
      16. description => "How to check a URL",
      17. arguments => [
      18. url => "https://www.bloonix.de/",
      19. warning => 3,
      20. critical => 5
      21. ]
      22. );
      23. # Mit der Methode add_option() wird eine Kommandozeilenoption
      24. # definiert, in diesem Fall ist es die Option --url.
      25. $plugin->add_option(
      26. # Ein sprechender Name der Option. Der Name wird in der WebGUI
      27. # im Formular zur Konfiguration von Services angezeigt.
      28. name => "URL to check",
      29. # Die Option, wie sie mit -- aufgerufen wird. Hier --url.
      30. option => "url",
      31. # Der Typ des Werts. Mögliche Angaben sind string, int, number.
      32. # - string ist eine Zeichenkette
      33. # - int ist eine Zahl von 0-n
      34. # - number ist eine Zahl von 1-n
      35. value_type => "string",
      36. # Eine sehr kurze Beschreibung des Wertes. Die Beschreibung
      37. # wird in der Hilfe angezeigt. Beispiel: --url <url to check>
      38. value_desc => "url to check",
      39. # Ist dies eine Pflichtoption? 1 für ja, 0 für nein.
      40. mandatory => 1,
      41. # Kann die Option mehrfach angegeben werden? 1 für ja, 0 für nein.
      42. multiple => 0,
      43. # Es kann mittels Regexp geprüft werden, ob der übergebene Wert
      44. # korrekt ist. Hier wird beispielhaft geprüft, ob die URL
      45. # einem bestimmten Format entspricht:
      46. regex => qr!https{0,1}://[a-zA-Z0-9]+([.-][a-zA-Z0-9]+)*(:\d+){0,1}(/[^\s]*){0,1}\z!,
      47. # Eine Beschreibung der Option.
      48. description => "The URL you want to check."
      49. );
      50. $plugin->add_option(
      51. name => "Warning threshold",
      52. option => "warning",
      53. value_type => "number",
      54. value_desc => "seconds",
      55. mandatory => 0,
      56. multiple => 0,
      57. default => 3,
      58. description => "Trigger a WARNING status if the request takes longer."
      59. );
      60. $plugin->add_option(
      61. name => "Crtitical threshold",
      62. option => "critical",
      63. value_type => "number",
      64. value_desc => "seconds",
      65. mandatory => 0,
      66. multiple => 0,
      67. default => 5,
      68. description => "Trigger a CRITICAL status if the request takes longer."
      69. );
      70. # Die Argumente werden geprüft und validiert. Das Objekt $opt ist eine
      71. # Hash-Referenz und enthält alle Argumente und Werte im Key-Value Format.
      72. # Optionen wie zum Beispiel --use-ssl werden umgewandelt in den Hash-Key use_ssl.
      73. my $opt = $plugin->parse_options;
      74. # Bloonix::Plugin stellt die Methode runtime() zur Verfügung, um den Zeitabstand
      75. # zwischen zwei Aufrufen zu messen. Beim erstmaligen Aufruf wird die Startzeit
      76. # gespeichert.
      77. $plugin->runtime;
      78. # Nun prüfen wir vereinfacht, ob der Aufruf der URL erfolgreich war.
      79. my @output = qx{curl '$opt->{url}' --retry 0 --silent --show-error --include 2>&1};
      80. # Dieses Mal gibt runtime() die Zeit zurück, die seit dem ersten Aufruf
      81. # vergangen ist.
      82. my $time = $plugin->runtime;
      83. if ($output[0] !~ m!^HTTP/1.1 200 OK!) {
      84. $plugin->exit(
      85. status => "CRITICAL",
      86. message => "the request wasn't successful: $output[0]",
      87. stats => {
      88. time => $time
      89. }
      90. );
      91. }
      92. my $status = "OK";
      93. # Zu guter Letzt prüfen wir die Antwortzeiten.
      94. if ($opt->{critical} && $time >= $opt->{critical}) {
      95. $status = "CRITICAL";
      96. } elsif ($opt->{warning} && $time >= $opt->{warning}) {
      97. $status = "WARNING";
      98. }
      99. # Die Methode exit() wird aufgerufen, um das Plugin zu beenden. Folgende Parameter sind erlaubt:
      100. # status = Der Status der Prüfung. Dies kann OK, WARNING, CRITICAL oder UNKNOWN sein.
      101. # message = Eine sprechende Statusmeldung.
      102. # stats = Hier werden die Statistiken des Plugins im Format key->value gespeichert.
      103. $plugin->exit(
      104. status => $status,
      105. message => "response time ${time}s",
      106. stats => {
      107. time => $time
      108. }
      109. );
      Display All


      Source Code

      1. root@example.com ~/example-bloonix-plugins/example # cat plugin-test
      2. plugin {
      3. id 100001
      4. plugin Test.Check
      5. command check-test
      6. datatype statistic
      7. category Test,HTTP,Network
      8. netaccess yes
      9. prefer remote
      10. abstract TEST check
      11. description Just a simple test script.
      12. }
      13. statistic {
      14. statkey time
      15. alias Response time
      16. datatype float
      17. units ms
      18. description Time in milliseconds waiting for response.
      19. }
      20. chart {
      21. id 1
      22. title HTTP request - response time
      23. options {
      24. ylabel time in ms
      25. chart-type area
      26. series {
      27. name time
      28. color \#005467
      29. }
      30. }
      31. }
      Display All


      Source Code

      1. root@example.com ~/example-bloonix-plugins/example # cat deploy.sh
      2. #!/bin/bash
      3. #
      4. # Deploy example plugin from https://bloonix.org/de/docs/howtos/howto-develop-plugins.html
      5. # Copy the Bloonix plugin in place
      6. cp -v check-test /usr/lib/bloonix/plugins/
      7. chmod -v 755 /usr/lib/bloonix/plugins/check-test
      8. echo
      9. # Copy the Meta information file in place
      10. cp -v plugin-test /usr/lib/bloonix/etc/plugins/
      11. chmod -v 644 /usr/lib/bloonix/etc/plugins/plugin-test
      12. echo
      13. # Make the bloonix-server register the new plugin
      14. bloonix-load-plugins --plugin /usr/lib/bloonix/plugins/check-test
      15. exit $?
      Display All


      Source Code

      1. root@example.com ~/example-bloonix-plugins/example # ./deploy.sh
      2. ‘check-test’ -> ‘/usr/lib/bloonix/plugins/check-test’
      3. mode of ‘/usr/lib/bloonix/plugins/check-test’ retained as 0755 (rwxr-xr-x)
      4. ‘plugin-test’ -> ‘/usr/lib/bloonix/etc/plugins/plugin-test’
      5. mode of ‘/usr/lib/bloonix/etc/plugins/plugin-test’ retained as 0644 (rw-r--r--)
      6. Load plugin /usr/lib/bloonix/plugins/check-test
      7. malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "#!/usr/bin/perl\n\n#...") at /usr/share/perl5/Bloonix/PluginLoader.pm line 84.

      A service is only a service if its monitored.
    • Fehler 1: Plugin metainfo-file laden, nicht das perl plugin

      Source Code

      1. bloonix-load-plugins --plugin /usr/lib/bloonix/etc/plugins/plugin-test


      Dann bekommen ich:

      Source Code

      1. root@foo.example.com ~/example-bloonix-plugins/example # bloonix-load-plugins --plugin /usr/lib/bloonix/etc/plugins/plugin-test
      2. Load plugin /usr/lib/bloonix/etc/plugins/plugin-test
      3. malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "plugin {\n id 100...") at /usr/share/perl5/Bloonix/PluginLoader.pm line 84.

      A service is only a service if its monitored.

      The post was edited 2 times, last by pthurner ().

    • Fix: richtiges json in der /usr/lib/bloonix/etc/plugins/plugin-test angeben

      Source Code

      1. {
      2. "plugin": {
      3. "id": "100001",
      4. "plugin": "Test.Check",
      5. "command": "check-test",
      6. "datatype": "statistic",
      7. "category": "Test,HTTP,Network",
      8. "netaccess": "yes",
      9. "prefer": "remote",
      10. "abstract": "TEST check",
      11. "description": "Just a simple test script."
      12. },
      13. "statistic": {
      14. "statkey": "time",
      15. "alias": "Response time",
      16. "datatype": "float",
      17. "units": "ms",
      18. "description": "Time in milliseconds waiting for response."
      19. },
      20. "chart": {
      21. "id": "1",
      22. "title": "HTTP request - response time",
      23. "options": {
      24. "ylabel": "time in ms",
      25. "chart-type": "area",
      26. "series": {
      27. "name": "time",
      28. "color": "#005467"
      29. }
      30. }
      31. }
      32. }
      Display All


      Source Code

      1. root@foo.example.com ~/example-bloonix-plugins/example # bloonix-load-plugins --plugin /usr/lib/bloonix/etc/plugins/plugin-test
      2. Load plugin /usr/lib/bloonix/etc/plugins/plugin-test
      3. root@foo.example.com ~/example-bloonix-plugins/example #

      A service is only a service if its monitored.
    • Source Code

      1. #> ls -1
      2. check-test
      3. plugin-test
      4. #> bloonix-create-plugin plugin-test >plugin.import
      5. #> sudo bloonix-load-plugins --plugin plugin.import
      6. Load plugin plugin.import


      Das Skript bloonix-create-plugin geht wie folgt vor:
      1. Das Plugin plugin-test laden
      2. Das Kommando check-test ausführen: check-test --plugin-info
      3. Die Daten von plugin-test und "check-test --plugin-info" mergen und ausgeben
      Die Daten, die hier rausfallen, kann man dann in die WebGUI importieren.

      Nochmal zur Erklärung:

      check-test --plugin-info enthält Daten über die Optionen, Schwellwerte etc.
      plugin-test enthält Metadaten über die Statistiken und wie die Charts gebaut werden sollen.

      Das alles ist notwendig, damit man beim Anlegen eines Service ein schickes Formular anstelle eines einfaches Textfeldes hat. Darüber hinaus hat man hier vordefinierte Charts. Man muss sich also nicht wie in Graphite mühselig die Charts zusammen basteln, dass muss man nur, wenn man Host-übergreifend Charts erstellen möchte.


      Die Plugins, welche in die WebGUI importiert werden, liegen bei Bloonix alle in einem eigenen Paket: bloonix-plugin-config

      Wenn man das Paket installiert, findet man die Plugins, welche importiert werden, unter /usr/lib/bloonix/etc/plugins/import/.