Can you monitor an USB-connected printer with Zabbix? Of course you can! But can ChatGPT help setting up the monitoring? Well... erm... maybe! By day, I am a Lead Site Reliability Engineer in a global cyber security company, Forcepoint. By night, I monitor my home with Zabbix & Grafana and do some weird experiments with them. Welcome to my blog about the project.
When it comes to printing, I am not laser-sharp. That's simply because I have not printed anything in a long, long time, and even if I have, it's been a printer maintained by Someone Else. Yes, I know how to add paper and how to do a ritual dance whilst printing to prevent the printer doing an annoying paper jam. Yes, I have added some printer servers under Zabbix monitoring at the office. That's about where my printer wisdom ends.
Nobody buys a printer anymore, except us
It's 2023, nobody prints anymore, or that's my personal impression. Well, that changed at our home as we enter another domain I understand 0% about. Occasionally my wife is making some clothes for our baby, me, and herself. For that, she's printing out the source code... the CAD models... well... the blueprints for the clothes. I kid you not, the clothes schematics look so complicated to me and the text-based instructions so alien that I'm sure the instructions are not from this planet.
Anyway, my wife found a used HP LaserJet Pro MFP M28a for us for a steal. No, not literal steal, but for 40 euros, which did sound cheap to me, so we bought it. Of course, normal human beings would just connect the printer to their laptop/desktop and be done with it. However, you know how this story continues.
I went to Zabbix integrations and was sure I would be able to easily find out how to monitor an USB-connected printer. I'll just search and... what? Nothing? No worries! We have the community templates! I'll just quickly grab a template from there.... empty result set, AGAIN? Monitoring SNMP-enabled printers is a different story, for that Zabbix can suit you very well, but just try to find out something for USB-connected printers. I know I could probably monitor my printer by spying cups but I'm not sure if it could return the details I wanted.
Flirting with ChatGPT
With my experiments, I'm used to the fact that I cannot get direct answers to my monitoring needs using the search engines, as I'm doing stuff that not too many have done. Even if they have, they might not have blogged about it. That's ok, but as this was about printing which is a common topic, I decided to try out what happens if I try out ChatGPT. I did the tests with the free ChatGPT 3.5, the new ChatGPT 4 would probably been a different ride.
Here's our lovely little chat.
Me: I have a HP LaserJet MFP M28a monochrome laser printer connected to USB. How do I get its remaining toner level through command line on Ubuntu 22.04?
ChatGPT: You can get the remaining toner level of your HP LaserJet MFP M28a monochrome laser printer through command line on Ubuntu 22.04 by following these steps:
- Install the "hplip" package by running the following command in the terminal:
sudo apt-get install hplip
- Once the installation is complete, run the following command to set up your printer:
sudo hp-setup -i
Follow the instructions provided by the setup wizard to configure your printer.
- After the printer is set up, run the following command to get the remaining toner level:
This will launch the HP Device Manager, which displays the toner level for your printer.
Alternatively, you can also run the following command to get the toner level directly in the terminal:
This will display the toner level in a percentage format.
Me: None of those worked as hp-levels and hp-systray require QT4 and D-Bus. Let's use ipptool instead.
ChatGPT: Sure, we can use the ipptool command to get the remaining toner level of your HP LaserJet MFP M28a monochrome laser printer on Ubuntu 22.04.
Here are the steps to follow:
Make sure your printer is connected to the computer and turned on.
Open the terminal on your Ubuntu 22.04 machine.
Run the following command to install the CUPS and IPP utilities:
sudo apt-get install cups-ipp-utils
- Run the following command to find the printer's URI:
The output should contain a line with the URI of your printer, which will look something like this:
- Run the following command to get the remaining toner level:
ipptool -t -v -H ipp://localhost:631/ipp/print -I /usr/share/cups/model/HP/hp-laserjet_pro_mfp_m26a.ppd get-printer-attributes.test | grep marker-levels
Replace "get-printer-attributes.test" with the actual name of the test file used by your printer.
- The output of the command should contain a line with the toner level, which will look something like this:
marker-levels: marker-high-levels=(100) marker-low-levels=(5) marker-names=(Black Cartridge) marker-current-levels=(30)
In this example, the toner level is 30%.
That's it! This is how you can use the ipptool command to get the remaining toner level of your HP LaserJet MFP M28a monochrome laser printer on Ubuntu 22.04.
* * *
The latest tip really did work, so we're off to very good start with ChatGPT! Next, I tried asking if it could create a Zabbix template for me, but even though it really tried, it did fail.
Adding printer to Zabbix
So, before continuing with the failed ChatGPT attempt, let's add this printer to monitoring, as that's the reason you are reading this blog anyway. I was very surprised about the detail level of the ipptool output: everything from supported paper sizes to printing options to other usual details, but then also some dynamic details like printer uptime.
I wanted to add those dynamic details, so I read through the output and added the details in the way you already know me doing:
- I first added a cronjob that runs every minute
ipptool -t -v "ipp://HP%20LaserJet%20MFP%20M28a%20(7C69CB)%20(USB)._ipp._tcp.local/" - get-printer-attributes.test >/tmp/hp-printer.txt
- Zabbix then reads that text file to a master item, and with dependent items and item pre-processing cherry-picks the interesting details
In screenshots, like this.
Does it work?
Of course it does, as this routine is what I've done so many times before in this blog. Here's the result. And yes, the toner will likely run out soon -- this is a used printer and it's complaining about low toner level every time we print. An interesting experiment to see how many pages we can still print before it actually runs out of juice. For "0% left", as also reported by other tools, the printer does excellent job.
Back to ChatGPT we go
If I would copy-paste my complete chat with ChatGPT, this blog post would become ridiculously long. Communicating with ChatGPT was like with a hyper-active intern who proceeds to do SOMETHING only to realise moments later that whatever it did was completely else than what you asked for. Probably I'm just a sucky ChatGPT prompter.
To get you an idea how ChatGPT failed, here's a summary how it failed:
- It really attempted to create YAML-based template files for me.
- Unfortunately, when attempting to import the templates to Zabbix, that part failed every time
- When I told the error messages to ChatGPT, it attempted to fix its errors, but in weird ways. Sometimes it changed the template in drastic ways, even if it was supposed to only add or modify a single line of it. Multiple times, it decided to change the format from YAML to XML unless I demanded it to stay on YAML
Here's few snippets from the chat. Maybe at some point I'll throw in some money to try out ChatGPT 4.
... this went on and on until I gave up. In conclusion: this time ChatGPT nudged me to correct direction to get the desired output about the printer info (although a sharp-eyed reader might notice I hinted it about the tool I'd like to use and how I might after all know more about printers than I pretended during this blog post...). Then, ChatGPT ran out of ink when it tried to generate the Zabbix templates. It's scary advanced anyway, and some day I will try out the more advanced ChatGPT 4.
I have been working at Forcepoint since 2014 and luckily I don't suffer about the empty paper syndrome very often.