BigIP Report Old
Problem this snippet solves:
This codeshare has been deprecated due to a hosting platform corruption. I have moved code and conversation to a new record (on the same original URL) https://devcentral.f5.com/s/articles/bigip-report
can be Overview
This is a script which will generate a report of the BigIP LTM configuration on all your load balancers making it easy to find information and get a comprehensive overview of virtual servers and pools connected to them.
This information is used to relay information to our NOC and developers to give them insight in where things are located and to be able to plan patching and deploys. I also use it myself as a quick way get information or gather data used as a foundation for RFC's, ie get a list of all external virtual servers without compression profiles.
The script has been running on 13 pairs of load balancers, indexing over 1200 virtual servers for several years now and the report is widely used across the company and by many companies and governments across the world.
It's easy to setup and use and only requires guest permissions on your devices.
Demo/Preview
Please note that it takes time to make these so sometimes they're a bit outdated and they only cover one HA pair. However, they still serve the purpose of showing what you can expect from the report.
Interactive demo
http://loadbalancing.se/bigipreportdemo/
Screen shots
The main report:
The device overview:
Certificate details:
How to use this snippet:
This codeshare has been deprecated due to a hosting platform corruption. I have moved code and conversation to a new record (on the same original URL) https://devcentral.f5.com/s/articles/bigip-report
Installation instructions
BigipReport REST
This is the only branch we're updating since middle of 2020 and it supports 12.x and upwards (maybe even 11.6).
Download: https://loadbalancing.se/downloads/bigipreport-v5.5.4.zip
Documentation, installation instructions and troubleshooting: https://loadbalancing.se/bigipreport-rest/
Docker support
This will be the recommended way of running bigipreport in the near future. It's still undergoing testing but it's looking really good so far.
https://loadbalancing.se/2021/01/05/running-bigipreport-on-docker/
BigipReport (Legacy)
Older version of the report that only runs on Windows and is depending on a Powershell plugin originally written by Joe Pruitt (F5).
BigipReport (Stable):
https://loadbalancing.se/downloads/bigipreport-5.3.1.zip
BigipReport (BETA): https://loadbalancing.se/downloads/bigipreport-5.4.0-beta.zip
iControl Snapin: https://loadbalancing.se/downloads/f5-icontrol.zip
Documentation and installation instructions:
https://loadbalancing.se/bigip-report/
Upgrade instructions
Protect the report using APM and active directory
Written by DevCentral member Shann_P:
https://loadbalancing.se/2018/04/08/protecting-bigip-report-behind-an-apm-by-shannon-poole/
Got issues/problems/feedback?
Still have issues? Drop a comment below. We usually reply quite fast. Any bugs found, issues detected or ideas contributed makes the report better for everyone, so it's always appreciated.
---
Also trying out a Discord channel now. You're welcome to hang out with us there:
Code :
85931,86647,90730
Tested this on version:
13.0
974 Comments
Tim, fast as lightning as usual. 🙂
You CAN patch the report to account for Offline devices. I would consider this an edge case though so it's unlikely that we'd develop a feature for it. Unless you can motivate a general need for this?
- danielpenna
Cirrus
Its ok, I have another idea to get around it. I have used the floating IP in the past for API calls for my own automation to make sure I get the active device so I will just flip the report to use the floating IP to get the active report. Thanks Tim and Patrick
- TimRiker
Cirrocumulus
The normal setup is to have one DeviceGroup with multiple Device entries, where one of the Device entries is active and one is standby. For example:
<DeviceGroup> <Name>lb-prod</Name> <Device>lb-prod-a.example.com</Device> <Device>lb-prod-b.example.com</Device> <StatusVip>https://lb-prod-status.example.com</StatusVip> </DeviceGroup>This will index if either A or B is currently active, and it will not index the standby device. Note: IPs can be used instead of dns names. I prefer DNS names. 🙂 The DNS or IP entry can be the management address, or a self ip with services enabled. If you use a float ip, indexing should work, but the device overview tab will not show the standby device(s).
- danielpenna
Cirrus
Thanks Tim, just as a FYI we have individual reports for each F5 cluster and a ALL report so it can be searchable through every F5. As I found out there is a few teams in my organization using the ALL report more than I thought as 2 x F5s are not there due to being not active...
This is how my All Report looks, just to show you how I am using it.
<DeviceGroup> <Name>Production</Name> <Device>Primary Device Cluster 1</Device> <Device>Primary Device Cluster 2</Device> <Name>NonProduction</Name> <Device>NonProd Primary Device Cluster 1</Device> <Device>NonProd Primary Device Cluster 1</Device> </DeviceGroup> - TimRiker
Cirrocumulus
I'm not clear what I'm looking at here. Are "Primary Device Cluster 1" and "Primary Device Cluster 2" two nodes in a traffic failover group (correct)? or are they two different traffic failover groups (incorrect)?
- richi3161
Nimbostratus
Hey, I tested this today. Its a easy and fast deployed - a very practical solution!
Thanks for that, Patrick!
- Tom_K
Nimbostratus
I have used the bigipReport app for 3-4 years and it is awesome. I currently am still on version 4.7.5 on Windows server 2012, bigip version 14.1.2.2 and running the web server on RHEL 7 linux. All working perfectly. I am testing bigipreport 5.2.9 on Windows server 2019 with the rest of the set up the same.
It seems to be collecting all the json information correctly, all the files are getting updated, virtual servers, pools, irules, certificates, etc and it creates an index.html file but is not putting the details of the report into the index.html file. Has anyone seen this behavior before ? I have checked the permissions and run the powershell script as administrator. All seems fine. I am not trying to use real time status yet. I have not found any errors from the bigipreport log.
Any thoughts or tips on what to check.
Kind Regards,
Tom
- TimRiker
Cirrocumulus
This is normal. BigIPReport starting at around v5.1.0 I moved the rendering to the client side. Now the index.html file is almost static between builds. The only thing that changes is the footer with the run date. I may eventually remove that as well, moving it to a json file. this would mean the json is the only thing changed in the run.
I assume the report renders correctly in the browser? Remember to use the correct underlay files for your version. The json format has changed some, so you need the correct javascript files to match the version you build with. On our internal system I deploy to "/" on the web server for the current release, and I have /test/ for the current beta release. This means the json for stable is in /js/ and the json in /json/ where as for the test release these are in /test/js/ and /test/json/ so both versions are usable on the same internal "site".
- PatrickCox
Altocumulus
Patrik and Tim,
I have run into a issue with the CSV export option. The description field could contain commas, and the Associated-Pools field has extra quotation marks > "|" < when there are multiple pools. These cause the fields to get cut up when imported into a spreadsheet.
I checked both v5.2.9 and v5.3.0 and found the code the same in both. I modified the following lines in the "generateCSV" function of bigipreport.js:
var line = vs.name + ',"' + (vs.description || "") + '",' + (vs.ip || "") + "," + (vs.port || "") + ',"' + (vs.sslprofileclient || "None") + '","' + (vs.sslprofileserver || "None") + '",' +(vs.compressionprofile || "None") + "," + (vs.persistenceprofile || "None") + "," + vs.availability + "," + vs.enabled + "," + vs.currentconnections + "," + vs.cpuavg5sec + "," + vs.cpuavg1min + "," + vs.cpuavg5min + "," + (vs.defaultpool || "None") + ',"'; var firstpool = true; for (var p in vs.pools) { if (!firstpool){ line += "|"} else { firstpool = false } var pool = getPool(vs.pools[p], vs.loadbalancer); line += pool.name + ": "; line += getMembers(pool); } line += '",' + vs.loadbalancer;I modified the "var line =" line (1) by changing the "," around the vs.description to be literal strings using apostrophes, and then at the end of the line the same thing to make sure quotation marks would go around the Associated-Pools field. I removed the quotation marks around the pipes (lines 10 & 12). And then ensured closing quotation marks (line 15).
I also used mixed case in the CSV header, but then, I am "particular" that way.
var csv = "Name,Description,IP,Port,SslProfileClient,SslProfileServer,CompressionProfile,PersistenceProfile,Availability,Enabled,CurrentConnections,CpuAvg5sec,CpuAvg1min,CpuAvg5min,DefaultPool,Associated-Pools,LoadBalancer\n";-Patrick
- TimRiker
Cirrocumulus
I've pushed a patch to the current stable git tree. It's mostly what you post above. In my branch, this code has been removed and replaced with the datatables csv export. This means that some fields that are in the old format, like cpuavg5sec are no longer present. The only fields in the new report that are present are the visible columns in the current table. Turn columns on and off on screen, and they will be added/removed from the report. The current searches are also applied, so you can limit the returned rows if you choose.
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)