pax_global_header00006660000000000000000000000064145275524600014524gustar00rootroot0000000000000052 comment=b32a6092f1b7f85e066e48bbc298a912b37430b6 documentation-release-1.2.26/000077500000000000000000000000001452755246000161035ustar00rootroot00000000000000documentation-release-1.2.26/.github/000077500000000000000000000000001452755246000174435ustar00rootroot00000000000000documentation-release-1.2.26/.github/ISSUE_TEMPLATE/000077500000000000000000000000001452755246000216265ustar00rootroot00000000000000documentation-release-1.2.26/.github/ISSUE_TEMPLATE/bad_link.md000066400000000000000000000007721452755246000237210ustar00rootroot00000000000000--- name: Bad Link about: Create a report to help us improve old links title: '' labels: 'old link,unverified' assignees: '' --- # Describe the link Please describe what the old link was for use for and if possible what the new link should be. ## Old Link [ OLD LINK ] ## New Link [ NEW LINK ] ## Screenshots If applicable, add screenshots to help explain your problem. ## Additional context Add any other context about the problem here. documentation-release-1.2.26/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000016101452755246000243160ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: 'bug,unverified' assignees: '' --- # Describe the bug A clear and concise description of what the bug is. ## To Reproduce Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error ## Expected behavior A clear and concise description of what you expected to happen. ## Screenshots If applicable, add screenshots to help explain your problem. ## Desktop (please complete the following information) - OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22] ## Smartphone (please complete the following information) - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - Browser [e.g. stock browser, safari] - Version [e.g. 22] ## Additional context Add any other context about the problem here. documentation-release-1.2.26/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000004351452755246000236200ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: Cacti Forums url: https://forums.cacti.net/ about: Please ask and answer questions here. - name: Confidential issues / Security notices url: developers@cacti.net about: Please report security vulnerabilities here. documentation-release-1.2.26/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000012511452755246000253520ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: 'enhancement' assignees: '' --- # Feature Request ## Is your feature request related to a problem? Please describe A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] ## Describe the solution you'd like A clear and concise description of what you want to happen. ## Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered. ## Additional context Add any other context or screenshots about the feature request here. documentation-release-1.2.26/.github/lock.yml000066400000000000000000000022041452755246000211140ustar00rootroot00000000000000# Configuration for Lock Threads - https://github.com/dessant/lock-threads-app # Number of days of inactivity before a closed issue or pull request is locked daysUntilLock: 365 # Skip issues and pull requests created before a given timestamp. Timestamp must # follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable skipCreatedBefore: false # Issues and pull requests with these labels will be ignored. Set to `[]` to disable exemptLabels: [] # Label to add before locking, such as `outdated`. Set to `false` to disable lockLabel: false # Comment to post before locking. Set to `false` to disable lockComment: > This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. # Assign `resolved` as the reason for locking. Set to `false` to disable setLockReason: false # Limit to only `issues` or `pulls` # only: issues # Optionally, specify configuration settings just for `issues` or `pulls` # issues: # exemptLabels: # - help-wanted # lockLabel: outdated # pulls: # daysUntilLock: 30 # Repository to extend settings from # _extends: repo documentation-release-1.2.26/.github/stale.yml000066400000000000000000000012731452755246000213010ustar00rootroot00000000000000# Number of days of inactivity before an issue becomes stale daysUntilStale: 120 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - pinned - security - enhancement # Label to use when marking an issue as stale staleLabel: stale # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: false documentation-release-1.2.26/.gitignore000066400000000000000000000003741452755246000200770ustar00rootroot00000000000000# Ignore vim swap files *.swp # Ignore any mac DS_Store files .DS_Store # Ignore build HTML output html/* # Ignore local test filese footer.html include/* manual/* # Ignore any CertBot files .well-known .well-known/* # Ignore any Git/GitHub files .git*documentation-release-1.2.26/.mdl_style.rb000066400000000000000000000007741452755246000205120ustar00rootroot00000000000000# customize style guide all rule "MD010", code_blocks: false rule "MD013", code_blocks: false, tables: false rule "MD029", style: "ordered" rule "MD046", style: "fenced" # Lesser rules exclude_rule "MD010" # hard tabs #exclude_rule "MD013" # line length # Rule Exclusions exclude_rule "MD001" # Headers are useful in other ways exclude_rule "MD024" # Headers with same name are useful, but break link labeling (Rework needed on affected files before enabling this rule) exclude_rule "MD046" # seems broken documentation-release-1.2.26/.mdlrc000066400000000000000000000000741452755246000172060ustar00rootroot00000000000000# mdl cli configuration style ".mdl_style.rb" verbose false documentation-release-1.2.26/.travis.yml000066400000000000000000000020101452755246000202050ustar00rootroot00000000000000before_install: - gem install chef-utils -v 16.6.14 - gem install mdl script: - ./bin/check_missing_link.sh - ./bin/check_markdown_style.sh notifications: email: on_success: change on_failure: always recipients: - developers@cacti.net slack: on_success: change on_failure: always rooms: - secure: VjWdzdjUSMGwKCObjuyCOwyzCUV+LDwPsUxdmgPojTLGgZS12QOQxD0QNRUkvvtaus2SgbFP/B49NYsqOGrRCFy21aa2goNcqCXUlty8Pcs4L1NIT3L4rmC5DjwKtlL6sO9/HwbS1woFE7fhZ1KA2nIoTHYeGCZFpW1gGpm9VUEbab9m9gP3HagtULInzx02M7vVHA6WwgumWpYqX62St6Tb11YK0SjkUYRKuZN8Ezf8euChEN6OwFwmJnDbKc37kYPHy7SLCKJ3Vy9wbw8O+tYLf8sNauHu0XJGaTg1cvDMbNwLdVBcV6CeaVZTkLyPY46UJ0wprIieKu+HxCQT6CNX4UT3qd27OFtlNDnsJ1o/9f6OKjnRTqPcF6ynLZuzWVIvnPo45bsafvDl/AcfYnm0c4UG+gCZnyMfr432WJ+RJxYZvPgqCEwiweQQMvBSSD3GP2/lbYNRCgI/NU9JDEEWWrYMj/cJxDn1qvKJmdNj4W9nFnF1BqAldzVAQQgLO04K215t1skENChyvEi4+ocZ2A2EwGx582d2PrIK0CpQHcQKxAZl5TwKiuIFQlIOCqh8vt45KG1mY/t9FmVbyhxtrlMdjAAd/6Rxh7aICJQ0PQc0Lw9LX1f2a9/JBNrQ4QxRo/xco4ZI9AfonG5PbMxHEusnfeTC3ZnFU6y+P3I= documentation-release-1.2.26/Aggregate-Templates.md000066400000000000000000000140021452755246000222440ustar00rootroot00000000000000# Aggregate Templates ## Aggregate Overview **Aggregate Templates** are a special form of a **Graph Template**. They allow you to easily create **Graphs** that combine data from multiple common **Graphs** from multiple **Devices**, and allow you to easily manage the resulting **Aggregate Graphs** to add and remove elements from other common **Graphs**. To create **Aggregate Graphs** that are managed through a Template, you first must create the **Aggregate Template**. Then from the Cacti **Graphs** page, you can select the **Graphs** that you want used as part of the **Aggregate**. You then select `Create Aggregate from Template` from the Cacti Actions drop-down. Once you have created your **Aggregate Graphs**, they behave like any other Cacti Graph. They can be a part of a Tree, zoomed, etc. They have an added bonus - you can add and remove **Graphs** from aggregate in a very controlled way, reducing the effort to maintain them during their life-cycle. If you wish to change settings for **Graphs** managed by the **Aggregate Template**, simply make the changes in the **Aggregate Template**, and they will cascade to **Aggregate Graphs** managed by the Template. ## Aggregate Template Interface The images below shows an Aggregate Template for Traffic. ![Aggregate Templates](images/aggregate-templates.png) When you edit the **Aggregate Template**, you are presented with an interface that allows you to define the Graph Canvas as well as it's formatting. You should experiment until you find the mechanism that works best to suite your needs. The `Aggregate Template` `Prefix` setting allows you to provide a pattern to be applied to the **Aggregate Graph** legend items. Any `host`, `query` or `input` references can be used in the `Prefix` section in order to uniquely identify the **Graph Item**. There are several `Graph Types` transformations that deal with how `AREA`, `LINEX` and `STACK` items are handled in the resulting **Aggeregate Graph**, they include: - **Keep Graph Types** - No transformation will occur. All `AREA`, `LINE`, and `STACKS` will be unchanged. - **Keep Type and Stack** - Which means the types will be preserved, but all data will be stacked instead of simply LINEX it will be transformed to LINEX:STACK - **Convert to Area/STACK Graph** - All `LINEX` will be converted to `AREA` and stacked. - **Convert to LINE1** - All **Graph Items** will be converted to `LINE1` - **Convert to LINE2** - All **Graph Items** will be converted to `LINE2` - **Convert to LINE3** - All **Graph Items** will be converted to `LINE3` - **Convert to LINE1/Stack** - All **Graph Items** will be converted to `LINE1` and stacked. - **Convert to LINE2/Stack** - All **Graph Items** will be converted to `LINE2` and stacked. - **Convert to LINE3/Stack** - All **Graph Items** will be converted to `LINE3` and stacked. The `Totaling` setting has multiple values. They include: - **No Totals** - There will be no Summation of Data in the Legend - **Print All Legend Items** - Means that all Legend Items selected will be included with a Total - **Print Totaling Legend Items Only** - This option means that the Legend will total all the Legend items into a single Legend. The `Total Type` - Will create groupings of common elements on the **Graph**, and reset stacking rules when a change in the common element occurs. The options include: - **Total Similar Data Sources** - Means that you will Total legend items and **Data Sources** through similar **Data Source** names, for example `traffic_out` and `traffic_in`. - **Total All Data Sources** - It means that you will sum the values for all **Data Sources** regardless of their **Data Source** name. When using `Total Type`, you are provided an option to additionally prefix your legends using the `Prefix for GPRINT Totals` with a text value. The default works in most cases. The `Reorder Type` will re-order the **Data Sources** within their respective grouping on the Graph so that they are ordered in a common way, in alphabetic order. The options include: - **No Reordering** - Don't make any changes in ordering. - **Data Source, Graph** - Order by **Data Source** name and then by **Graph** name - **Graph, Data Source** - Order by **Graph** name and then by **Data Source** name - **Base Graph Order** - Focus on the **Graph** name only ![Aggregate Templates Edit General Options](images/aggregate-templates-edit1.png) The `Graph Template Items` section allows you to either Skip or Total (aka include) the **Graph Items** in the resulting **Aggregate Graphs**. When you think about how a resulting **Aggregate** graph will look, there are some elements that simply will not result in a good looking **Graph**. In those cases you will want to remove them from the resulting **Aggregate Graphs**. The `Color Template` option allows you to use differing Color rotations when displaying elements on the resulting **Aggregate Graphs**. **Color Templates** can be added and removed from the **Color Templates** menu pick under `Console > Templates`. ![Aggregate Templates Edit Canvas Options](images/aggregate-templates-edit2.png) The several sections allow you to override any of the common **Graph Template** elements from the resulting **Aggregate Graph**. We will not explain those options here, only let you know that you can override them in your resulting **Aggregate Graph**. ![Aggregate Templates Edit Common Options](images/aggregate-templates-edit3.png) ![Aggregate Templates Edit Scaling Options](images/aggregate-templates-edit4.png) ![Aggregate Templates Edit Grid Options](images/aggregate-templates-edit5.png) ![Aggregate Templates Edit Axis Options](images/aggregate-templates-edit6.png) ![Aggregate Templates Edit Legend Options](images/aggregate-templates-edit7.png) ## Summary There are several combinations of options that you can use when working with an **Aggregate Template**. Some of these options will results in horrible and unexpected outcomes, so you will have to experiment until you come up with a desirable **Aggregate Template**. --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Aggregates.md000066400000000000000000000001741452755246000205000ustar00rootroot00000000000000# Aggregate Graphs This section will describe **Aggregate Graphs** in Cacti. --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Automation-Networks.md000066400000000000000000000040031452755246000223540ustar00rootroot00000000000000# Automation Networks This section will describe **Automation Networks** in Cacti. Adding a network to scan in the automation plugin is easy. On the main console click Automation. Once on the below page click the + on the top right of the page. ![Automation Networks](images/automation-network-main.png) You will now see the below page. If you want to scan 192.168.1.0/24, you would enter that in the subnet range textbox then enter the subnet in CIDR format. Other important options are | Option | Description | | -------------------------- | ------------------------------------------------------------------------------------------ | | Schedule type | How often you want to scan this subnet for devices | | Discovery threads | How many proccessess to spawn during the scan | | Max Runtime | to prevent the scan from running indefinitely | | Automatically add to Cacti | If a device is SNMP reachable and matches a rule from this subnet the device will be added | | Netbios | Attempt to resolve the hostname by netbios | After you are done adding your network details, ensure you enable the rule and save. ![Automation Networks Edit General](images/automation-networks-edit1.png) Ensure that if you have a SNMP rule for this part of the network to select the SNMP option set this will tie the network to the SNMP rules ![Automation Networks Edit General](images/automation-reachability-settings.png) To begin the scanner click on the bottom right drop down and select "Discover Now" this will start the discovery ![Automation Networks](images/automation-networks.png) Here is the flow of the automation scan ![Automation Flow](images/automation-flow3.png) --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Boost.md000066400000000000000000000212371452755246000175200ustar00rootroot00000000000000# Performance Boosting Settings ## Summary Cacti Performance Settings, formally known as `boost` are available to support very large Cacti installations, and are required for supporting the multiple **Data Collector** architecture that Cacti affords. Designed years ago, Boosts intent was to reduce the the main data collectors cycle time by caching writes to disk, and those writes would be handled by an out of band process currently known as `poller_boost.php`. Since these Large Sites had potentially well over one million **Data Sources**, there was previously no way to write all that data every 5 minutes. So, the buffering helped with maintaining a consistent run-time, and minimizing the user experience disruption from all that blocking Disk I/O. In the modern Data Center, where we find an abundance of NVMe, Flash, and SSD's, the impact of all that I/O has been reduced. However, Boost now serves as a way to extend the life of your Flash media and therefore increase the availability of your Cacti server over its lifetime. The Boost function in Cacti has several features that can be enabled or disabled on demand by the Cacti Administrator. They include: - **On Demand RRD Updates** - Required in ALL multiple **Data Collector** installs and control the mass update of RRDfiles through periodic dumping of Cacti's Boost cache. - **Image Caching** - caches PNG and SVG representations of the Cacti **Graphs** to reduce the overall CPU utilization of the Cacti server infrastructure. ## Prerequisites In its initial design the Boost process leveraged MySQL Memory Tables to increase overall performance, and to reduce writing data to disk. This is still a valid case however, with improvements in InnoDB performance over the years combined with Flash storage, the need for using MySQL Memory Tables has diminished. In some cases, for example when using MariaDB Galera, or MySQL Master/Slave replication, it can not be used. If you do wish to use Memory you have to pay close attention to the amount of data that will be cached in your design. You should periodically check that you have sufficient memory available to cache all the data in the Boost cache. The MySQL/MariaDB setting that controls the maximum size of a memory table is the `max_heap_table_size` setting in your `/etc/my.cnf.d/server.cnf` file. To change the `max_heap_table_size` setting you require a restart of MySQL/MariaDB. So you won't want to make these changes often, as some systems have little time between mass updates to perform a restart. If you restart MySQL/MariaDB when the cache is full, you will lose those updates upon restart unless you first change the ENGINE of the Boost cache table to InnoDB or MyISAM before restarting. When using Memory Tables you have to be cognizant of the maximum output width of the Cache table called `poller_output_boost`. By default, it's set to 512 bytes, which allows for very wide output from your **Data Collectors**. MySQL Memory Tables do not allow for variable sized columns in memory - which means if you write one byte to it, it will take 512 bytes. So, tuning this width is very important. That will be explained in more detail later on in this chapter. ## Checking how your system is configured To see how your system is configured, you can goto `Console > Utilityes > System Utilities > View Boost Status` option, when you go there, you will see an image similar to that below. ![Boost Status Screen](images/boost-status1.png) From this image, we can tell a few things: - Boost is Idle, or flushing the Cache - The system has 1,120 Data Sources in total - There are currently 58,710 Boost records cached in all tables Additionally, you can tell - Our Current Database Engine is InnoDB - The size of the current table is 3.52 MBytes - The average 'Bytes/Record' is 62 - We have unlimited Records that can be stored there From that Data, we know if we were to use a Memory Table, at present it's width could be say 100 Bytes and we could cut memory use by 80%. We can also estimate from this interface, how large our `max_heap_table_size` would ultimately have to be, keeping in mind that the `Current Boost Table Size` is misleading since even though each record can be in excess of 512 bytes, it's presently only using 62 bytes of total storage per record. In the image below, you can see runtime statistics, update frequencies, and Image Caching settings, which are currently disabled. ![Boost Status Screen](images/boost-status2.png) From this setup, you can see that mass RRDfile updates are only happening roughly every 6 hours to minimize wear and tear on the SSD storage in use. ## Enabling Boost To find and Enable the Boost settings, you first go to `Console > Configuration > Settings > Performance`. From this interface, in the image below, you can setup Boost. ![Boost Settings Screen](images/boost-settings.png) As an exercise, lets look at a fictitious setup and determine what the `max_heap_table_size` should be. Let's say, for example, that your Cacti systems **Poller Cache** contains 200k rows, and the maximum length of any rows output is 20 bytes, about the size of a 64bit counter value. If you are running scripts, ones that return very long results, like the MySQL statistics plugin, you should consider carefully the next step. In this case, we will assume that even though the largest value returned is 20 bytes, we will elect to maintain a maximum output column width of 50 bytes. The important thing here is that memory tables store the full size of the column, even though the column type is `varchar()`. By default it's `varchar(512)`. Therefore, if your system only needs 50 bytes, you will have 90% waste in your `poller_output_boost` table. The next step would me to modify the structure of your `poller_output` and `poller_output_boost` tables. You would do this by doing the following: ```sql ALTER TABLE poller_output, MODIFY column output varchar(50) NOT NULL default "" ENGINE=memory; ALTER TABLE poller_output_boost, MODIFY column output varchar(50) NOT NULL default "" ENGINE=memory; ``` As previously mentioned, its also important that the `poller_output` table is converted to memory, eliminate any disk I/O related to poller updates. Now, you need to determine how many polling cycles will fit into your `poller_output_boost` table. In this case, when sizing the `poller_output_boost` table, you take the output column width and add 34 bytes per record. So, in this case, each data source result to be stored in the `poller_output_boost` table would take 84bytes. Then, with the Maximum Heap Table size in hand, and let's say the default is 16MBytes for the largest table (the MySQL default), you can calculate the number of poller intervals that you can store without running out of MySQL memory. So, let's take our example: ```console 200k Cache Entries x 84 Bytes Per Poller Cache Row = 1,680,000 Bytes per Poll ``` This means that your `poller_output_boost` can handle 10 Cacti polling cycles, or roughly 4/5 of an hour of poller data before it must be cleared by the system. As all things go, you should not want to take your system to the edge. So, it is best to increase the `max_heap_table_size` of your system to ensure you have buffer in cases where say for example, your disks become degraded over time and the Boost cycle is extended as a result. But let's look at the problem a different way. Let's say that you wish to perform major updates every 4 hours. With a 50% memory reserve, we should plan for 6 hours of updates. This way, we need to have size for 72 poller cycles in your `poller_output_boost` table. This means that the `max_heap_table_size` must be at least 131,040,000 Bytes. So, let's call it a deal. Provided you have enough memory, and I expect that you do, you would edit the /etc/my.cnf.d/server.cnf and add/modify the following line: ```console max_heap_table_size=132M ``` Then, save the file, and restart MySQL. Once this is done, you are ready to “enable” Boost as described above. ## Flushing the Boost Cache If you are planning on system maintenance if you are using MEMORY storage in MySQL or MariaDB, you should flush your Boost Cache before your system is taken offline for maintenance. To do this, you simply login to the Cacti system as root, and flush the Cache using the commands below ```console cd /var/www/html/cacti php -q poller_boost.php --force ``` This operation will take several minutes to complete, at which time there will be additional records in the `poller_output_boost` table. So, it might be better that after the `poller_boost.php` process is complete, to modify the `poller_output_boost` table to InnoDB before reboot, and then convert it back to memory after they system maintenance is complete. --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/CDEFs.md000066400000000000000000000114701452755246000173140ustar00rootroot00000000000000# CDEFs ## Background CDEF's in Cacti are a one to one analog to CDEF's in RRDtool. Cacti simply provides and interface to create and manage them. Once the CDEF's are created in Cacti they can be imported and exported globally. CDEF's are mathematical formulas that either modify the numeric data from one to many data sources or VNAMES that you have in your **Graph Template**. The format of the mathematical formulas is called Reverse Polish Notation (RPN). RPN was and is an early form of how Engineers entered equations into early HP and other Calculators to solve Engineering problems. The reason we still use it today, is that it follows a simple Stack principle. In other words, it's not broken. CDEF's can get very complex as there are several mathematical functions available in the RRDtool command set. ## CDEF Interface In the image below, you can see all the CDEF's that are included in Cacti by default. There are quite a few of them. Many of the formulas in use are quite simple. If you want to view Tutorials on how to work with CDEF's you should go to the [RRDtool Tutorial](https://oss.oetiker.ch/rrdtool/tut/cdeftutorial.en.html). There is also documentation at the [RRDtool Website](https://oss.oetiker.ch/rrdtool/doc/rrdgraph_data.en.html#CDEF). In this image you can see that you have the ability to Delete or Duplicate a CDEF, but note you will not be able to Delete any CDEF that is associated with a Cacti **Graph** or **Graph Template**. ![CDEFs](images/cdefs.png) When you Click on the CDEF's name, you will enter into an Edit screen. From there you will see an ordered list of your Stack. It normally will begin with something like the CURRENT_DATA_SOURCE which means that when you Add a **Graph Item** to either a **Graph Template** or **Graph**, you can select a CDEF. The **Data Source** associated with that **Graph Items** is the CURRENT_DATA_SOURCE. After that, you may see a numeric number, followed by a math operator. That the simplest form of a CDEF. If you have drag & drop enabled, you can re-order the CDEF items using drag & drop. Otherwise you will see arrows that allow you to move the CDEF Items up and down. ![CDEFs Edit](images/cdefs-edit1.png) When editing a CDEF, the first decision is what Type of Data you want to put on the Stack, you options as shown in the image below. They include: Name | Description --- | --- Function | A mathematical function that we will describe below Operator | Common mathematical operators including (+, -, *, /, and %) Another CDEF | Another Cacti CDEF. That could be confusing Custom String | Something like a number, a 'U' or 'Nan' for example ![CDEFs Item Type Edit](images/cdefs-edit3.png) ## Special Data Sources In this next Image, you will find a CDEF Item in the process of being added. Note that when you pick `Special Data Source` you have a drop-down that appears with the flavor of `Special Data Source`. There are many. They include: Name | Description --- | --- Current Graph Item Data Source | The value of the Data Source associated with the Graph Item Current Graph Item Polling Interval | This value is otherwise known as the Step in RRDtool terminology All Data Sources (No Dupes) | The total of all Data Sources removing any duplicate DEF's All Data Sources (With Dupes) | Add the values from all the Data Sources whether or not they are duplicated All Similar Data Sources (No Dupes) | Means all Data Sources with the same RRDtool Data Source name like traffic_in, and traffic_out All Similar Data Sources (No Dupes) Poller Interval | The max of the poller intervals returned from all similar Data Sources Current Data Source Item: Minimum Value | The RRDtool minimum value of the Current Data Source Current Data Source Item: Maximum Value | The RRDtool maximum value of the Current Data Source Graph: Lower Limit | The lower Limit of the Graph Graph: Upper Limit | The upper Limit of the Graph Count of All Data Sources (No Dupes) | The total count of all Data Sources without Duplication Count of All Data Sources (With Dupes) | The total count of all Data Sources including Duplicates Count of Similar Data Sources (No Dupes) | The total count of Data Sources with the same RRDtool Data Source Name Count of Similar Data Sources (With Dupes) | The total count of Data Sources with the same RRDtool Data Source Name As you can see there is quite a bit of information that can be pulled from RRDtool for performing Graphical manipulation of Data. ![CDEFs Item Edit](images/cdefs-edit2.png) ## CDEF Functions This list of CDEF functions is long and it's best to refer directly to the [RRDtool Manual](https://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en.html) for meanings and examples of their use. Cacti supports all of them, if you find one that is not supported, open an [Issue on Github](https://github.com/Cacti/cacti/issues). --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Cacti-Log.md000066400000000000000000000062501452755246000201720ustar00rootroot00000000000000# The Cacti Log Interface ## Summary The Cacti Log is where all Cacti statistics, warnings, errors and other log messages are sent to. Cacti can optionally log some information to your syslog or event log depending on your OS type. The Cacti Log is by default ordered from newest event to oldest event, and the Cacti Log is rotated by Cacti itself once a day. If you have the User Level permission, you can view any available Cacti Standard Output or Standard Error log. If you have the Administrative level access, you may additionally purge information from the logs. As a Cacti Administrator, you have the ability to filter out some message types from users for example, one message type that people like to filter out is "AUTH" messages that tell you who is logging into the Cacti Web Site. You can edit these removal rules from the Cacti Settings page. An image of the Cacti Log file can be seen below. ![Cacti Log File](images/cacti-log.png) ## Cacti Log Filters What we like to see in the Cacti Log is a lot of Green, which means good. By default, WARNINGS are yellow, and ERRORS are red. But there are other types of messages that highlight differently. Generally, you can filter for these message types. The filters include: - **File** - The Cacti Log file to view. They are suffixed by a data when they were rotated using the following pattern: YYYY-MM-DD. - **Tail Lines** - The number of lines to view from the selected Cacti Log. - **Types** - The message types to view. These will be explained below. - **Display Order** - The order to display the Log lines, either *Newest First* or *Oldest First*. - **Refresh** - How often to Auto-refresh the interface. - **Search** - A perl compatible Regular Expression to search the log with. The Cacti Log **Types** include the following: - **Stats** - Anything that includes the word **STATS** - **Warnings** - Anything that includes the word **WARNING** - **Warnings++** - Anything of each **WARNING**, **ERROR**, **DEBUG**, and **SQL** this one is good for debugging, and it will include most important errors to the Cacti Administrator. - **Errors** - Anything that includes the word **ERROR** - **Errors++** - Anything of each **ERROR**, **DEBUG**, and **SQL** - **Debug** - Anything that includes the word **DEBUG** - **AutoM8** - Anything that includes the word **AUTOM8**. These message come from Cacti automation of Devices, Graphs, and Trees - **Non Stats** - Anything that does not include the word **STATS**. - **Boost** - Anything that contains the word **BOOST**. - **Device Up/Down** - Any device Up/Down notification including t hose that come from *Thold* or *Monitor* Plugins. - **Recaches** - Any Device Recache Events. - **Threshold** - If the *Thold* plugins is installed, any of it's threshold breach and restoration events. ## Differences between User and Administrative Views As previously mentioned, the Cacti log has two permission levels, the User Permission level will not include the *Purge* button, and can have some information hidden from public view whereas the Administrative view includes all Log messages and a *Purge** button. --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Cacti-SSL-Configuration.md000066400000000000000000000021411452755246000227120ustar00rootroot00000000000000# Configuring and enabling SSL for Cacti with a self signed certificate Enabling SSL for Cacti is mostly done at the webserver level. An example SSL config for Http is as follows: ```bash yum install -y mod_ssl -y openssl genrsa -out ca.key 2048 openssl req -new -key ca.key -out ca.csr openssl x509 -req -days 700 -in ca.csr -signkey ca.key -out ca.crt cp ca.crt /etc/pki/tls/certs cp ca.key /etc/pki/tls/private/ca.key cp ca.csr /etc/pki/tls/private/ca.csr ``` Then we need to update the Apache SSL configuration file: ```ini vi +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key ``` Restart the httpd service: ```bash systemctl restart httpd ``` After configuring the web server to accept https, you can enable https in the GUI --- **Note**: if using multiple pollers, all must have HTTPS enabled for the remote polling feature to work properly. --- **Note**: If your Cacti system is public, it is recommended to get a certificate from a trusted certificate provider. --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Color-Templates.md000066400000000000000000000026221452755246000214410ustar00rootroot00000000000000# Color Templates **Color Templates** define a list of Colors to be used for **Aggregate Graphs** in Cacti. As you add **Graphs** to an **Aggregate Graph**, you need to distinguish one **Graph** from the next within the **Aggregate Graph**. These **Color Templates** are a list of colors that will be looped through in Round Robin fashion to render the **Aggregate Graph**. So, for example, if your **Color Template** uses 8 differing **Colors**, and your **Aggregate Graph** includes 16 *Graph Items*, then each color will be used twice in the **Aggregate Graph**. Below, you can see the four standard **Color Templates**, you can see that you have the ability to either *Delete* or *Duplicate* the **Color Templates**. As with other Cacti objects, you will not be allowed to *Delete* a **Color Template** in use. ![Color Templates](images/color-templates.png) In the image below, you can see the **Color Template** edit screen. This simply screen allows you to add, remove and re-order colors in the list. ![Color Templates Edit](images/color-templates-edit1.png) Shown in the image below, only Cacti **Colors** are allowed to be selected for Aggregate **Color Templates**. The **Color** drop down can by typed into if you wish to search through the list of approximately 340 legacy and *Named Colors*. ![Color Templates Item Edit](images/color-templates-edit2.png) --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Colors.md000066400000000000000000000026601452755246000176720ustar00rootroot00000000000000# Colors Colors in Cacti come in two types and used to maintain a list of colors that can be used in Cacti for **Graph Templates** and **Graphs**. The first type are the legacy Cacti colors imported from earlier versions of Cacti. Starting with Cacti 1.0, Cacti started to support the concept of *Named Colors* which come from a well known dictionary of well defined colors. *Named Colors* are read only in Cacti. While the legacy Cacti colors can be named as the Cacti administrator desires. The image below shows a list of Cacti *Named Colors*. You can see that there is a search bar and check boxes for showing just *Named Colors* or all colors, and another check box for showing Colors that are used in **Graph Templates** and *Graphs*. You can not remove either the *Named Colors* or Colors that are in use by either a **Graph Template** or **Graph**. ![Colors](images/colors.png) The image below is the Color edit screen. If the color is read only, you can open this page, but not change any of the details. For legacy Cacti colors, or for Colors added by the Cacti Administrator, you can change the name and the Color hex value. ![Colors Edit](images/colors-edit1.png) Below, you can see the color picker that allows you to visually find the appealing color. You can also use hex values that were previously supported in earlier Cacti version. ![Colors Color Edit](images/colors-edit2.png) --- Copyright (c) 2004-2023 The Cacti Group documentation-release-1.2.26/Command-Line-Scripts.md000066400000000000000000001501131452755246000223160ustar00rootroot00000000000000# Command Line Scripts (CLI) Cacti supports a number of command line scripts. You will find them in the `./cli` directory. The CLI scripts fall into multiple categories, they include: - **Automation** - Utilities to help automate adding objects to Cacti - **Maintenance** - Utilities to help keep Cacti healthy - **Repair** - Utilities to help with repairing Cacti database components - **Repair/Migration** - Utilities to help with repairing or migrating Cacti components - **Install/Upgrade** - Utilities to help with installing and upgrading Cacti In the table below, each of the CLI scripts are categories and explained briefly. ## Automation Scripts | Script | Category | Description | | ---------------------- | ----------- | ----------------------------------------------------------------------------------------------- | | add_device.php | Automation | Allows adding a Device to Cacti. Most device options are included. Some plugin options may not. | | add_data_query.php | Automation | Allows adding a Data Query to Cacti. | | add_graph_template.php | Automation | Allows adding a Graph Template to Cacti. | | add_graphs.php | Automation | Allows adding a Graph to Cacti. | | add_perms.php | Automation | Allows adding permissions to Cacti. | | add_tree.php | Automation | Allows adding tree's tree branches and objects to Cacti Trees. | | copy_user.php | Maintenance | Allows creating new users from Templates | ## Maintenance Scripts | Script | Category | Description | | ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | input_whitelist.php | Maintenance | To to onboard new Data Input Methods when using Cacti in a high security environment where new Data Input Methods must always be vetted before enabling for general use. | | poller_graphs_reapply_names.php | Maintenance | Allows selecting re-running of Cacti's suggested values engine for Graphs | | poller_reindex_hosts.php | Maintenance | Batch method to re-index Cacti Devices | | analyze_database.php | Maintenance | Analyzes all Cacti tables rebuilding their index cardinality. Important to run after having added large numbers of Devices and Graphs to Cacti. | ## Repair Scripts | Script | Category | Description | | ------------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | poller_output_empty.php | Repair | Removes bad entries from Cacti's poller output table. | | rebuild_poller_cache.php | Repair | Batch process to re-populate Cacti's poller cache. NOTE: This script can run for a very long time on large systems. | | repair_database.php | Repair | Utility to look for common problems with old Cacti databases where objects were removed while still in use. Also rapairs all tables after a system crash. | | repair_graphs.php | Repair | Utility to repair Cacti Graphs whose structure is damaged due to legacy Cacti behavior. | | repair_templates.php | Repair | Utility to repair Cacti Templates whose structure was damaged due to legacy Cacti behavior. | ## Repair/Migration Scripts | Script | Category | Description | | ------------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | audit_database.php | Repair/Migration | Script to audit your Cacti schema, and repair any tables that don't match the stock Cacti schema. It will also upgrade the Cacti schema and run plugin upgrade functions. This is a good migration tool to move database from old versions of Cacti. | | convert_tables.php | Repair/Migration | Convert all tables from their current form to the Cacti preferred table type, collation and charset | | splice_rra.php | Migration | Utility that allows two RRDfiles to be merged, and also assists with resampling an old RRDfile to a new RRA configuration, for example moving a Cacti system from 5 minute polling to 1 minute polling. | ## Install/Upgrade Scripts | Script | Category | Description | | ----------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | import_package.php | Install/Upgrade | Import a Cacti package from a tgz file. | | install_cacti.php | Install/Upgrade | Script to install Cacti from a raw schema. Used primarily by distribution maintainers. | | md5sum.php | Install/Upgrade | Utility to verify the MD5SUM of a file. | | sqltable_to_php.php | Install/Upgrade | Utility for Plugin Developers to create an object for creating tables in plugins. | | structure_rra_paths.php | Install/Upgrade | Utility to convert a system from a flat directory path to a heirarchial one. Important for certain file systems that don't perform well when there are tens or hundreds of thousands of files in a single directory. | | upgrade_database.php | Install/Upgrade | Utility to upgrade a Cacti database from a point in time to the current release. Or even rerun the database upgrade from a point in the past to catch up with changes. This script should be used in conjunction with the `audit_database.php --repair --upgrade` option. | > **NOTE**: Package maintainers may wish to utilize the CLI methods of > install_cacti.php and upgrade_database.php to perform in place installations > and upgrades. In the sub-sections below, we will demonstrate the use of a few of these CLI scripts. > **Caution**: In the following examples, several numbers are shown as output > from various scripts. They will vary between different installations. So don't > bother, if your numbers will vary. ## Rebuild Poller Cache The poller cache holds all commands that cacti will issue during the polling process in an internal format. It is possible, to review the current contents of the poller cache by visiting `System Utilities`, `View Poller Cache`. It is possible to apply filters to this view; it will show up like ```console Localhost - Hard Drive Space Script Server: /var/www/html/cacti/scripts/ss_host_disk.php ss_host_disk 127.0.0.1 1 1:161:500:somesecret:::::: get total 6 RRD: /var/www/html/cacti/rra/localhost_hdd_total_61.rrd Localhost - Load Average Script: /usr/bin/perl /var/www/html/cacti/scripts/loadavg_multi.pl RRD: /var/www/html/cacti/rra/localhost_load_1min_5.rrd Localhost - Logged in Users Script: /usr/bin/perl /var/www/html/cacti/scripts/unix_users.pl RRD: /var/www/html/cacti/rra/localhost_users_6.rrd Localhost - Memory - Free Script: /usr/bin/perl /var/www/html/cacti/scripts/linux_memory.pl MemFree: RRD: /var/www/html/cacti/rra/localhost_mem_buffers_3.rrd Localhost - Memory - Free Swap Script: /usr/bin/perl /var/www/html/cacti/scripts/linux_memory.pl SwapFree: RRD: /var/www/html/cacti/rra/localhost_mem_swap_4.rrd Localhost - mtaReceivedMessages SNMP Version: 1, Community: somesecret, OID: .1.3.6.1.2.1.28.1.1.1.1 RRD: /var/www/html/cacti/rra/localhost_mtareceivedmessages_47.rrd Localhost - mtaReceivedVolume SNMP Version: 1, Community: somesecret, OID: .1.3.6.1.2.1.28.1.1.4.1 RRD: /var/www/html/cacti/rra/localhost_mtareceivedvolume_49.rrd ``` There are several circumstances, that may result in the poller cache being out of sync. An example would be a change of the name of a script used in a `Data Input Method`. This change is _not_ automatically propagated to the poller cache. It is required, to run `php -q rebuild poller_cache.php` manually. Calling the script with the parameter `--help` yields ```console shell>php -q rebuild_poller_cache.php --help Cacti Rebuild Poller Cache Script 1.0, Copyright 2004-2023 - The Cacti Group usage: rebuild_poller_cache.php [-d] [-h] [--help] [-v] [--version] -d - Display verbose output during execution -v --version - Display this help message -h --help - Display this help message ``` Debug mode lists the data sources items that are worked upon. ```console shell>php -q rebuild_poller_cache.php -d WARNING: Do not interrupt this script. Rebuilding the Poller Cache can take quite some time DEBUG: There are '38' data source elements to update. DEBUG: Data Source Item '1' of '38' updated DEBUG: Data Source Item '2' of '38' updated DEBUG: Data Source Item '3' of '38' updated DEBUG: Data Source Item '4' of '38' updated .... ``` Without any parameter, some dots are shown as progress indicators. ```console shell>php -q rebuild_poller_cache.php WARNING: Do not interrupt this script. Rebuilding the Poller Cache can take quite some time ...................................... shell> ``` > **Caution** > > Rebuilding the poller cache interferes with the poller operation. Make sure > that the poller is not running and will not start during a rebuild operation ## Re-Index Hosts Re-Indexing is required only for SNMP/Script Data Queries. Remember, that when applying a Data Query to a Host, a `Re-Index Method` has to be chosen. This reindex method governs the automatic re-indexing based on specific events. ###### Table 20-1. Re-Index Methods | Re-Index Method | Description | | --------------------- | ------------------------------------------------------------------ | | Uptime Goes Backwards | Refers to a system reboot | | Index Count Changed | Refers to a change of the number of indexed items | | Verify All Fields | All index fields of the according XML file are checked for changes | If the method is set to `Uptime Goes Backwards`, Cacti will detect if the target has been rebooted by querying sysUptime (.1.3.6.1.2.1.1.3.0). If the current value for the uptime is lower than the previous one (uptime goes backwards), a reboot is assumed and a re-index is performed If the method is set to `Index Count Change`, e.g. the number of interfaces, without checking sysUptime. It is of particular interest in cases, where indexed entries may change without the need of a reboot. As modern operating systems seldom require reboots for system configuration changes, you may want to consider this setting for many cases (e.g. creating of a new filesystem without a reboot). The index to be considered is defined by the according XML file. If the method is set to `Verify All Fields`, all indexes of the data source are checked for changes. This is of particular interest e.g. in cases, where the index is non-numeric (e.g. a MAC address). It should be noted that in the 1.0 and 1.1 releases, this method was found to be broken and has been corrected since 1.2. If you feel the need for manual re-indexing, you may run it from CLI. Calling the script with the parameter `--help` yields ```console shell>php -q poller_reindex_hosts.php --help Cacti Reindex Host Script 1.2, Copyright 2004-2023 - The Cacti Group usage: poller_reindex_hosts.php --id=[host_id|All] [--qid=[ID|All]] [--host-descr=[description]] [-d] [-h] [--help] [-v] [--version] --id=host_id - The host_id to have data queries reindexed or 'All' to reindex all hosts --qid=query_id - Only index on a specific data query id; defaults to 'All' --host-descr=description - The host description to filter by (SQL filters acknowledged) --debug - Display verbose output during execution -v --version - Display this help message -h --help - Display this help message ``` Running it in debug mode for the host with `id=2` may yield ```console shell>php -q poller_reindex_hosts.php -id=2 -d WARNING: Do not interrupt this script. Reindexing can take quite some time DEBUG: There are '1' data queries to run DEBUG: Data query number '1' host: '2' SNMP Query Id: '1' starting DEBUG: Data query number '1' host: '2' SNMP Query Id: '1' ending ``` A silent run for all devices is issued by ```console shell>php -q poller_reindex_hosts.php -id=All WARNING: Do not interrupt this script. Reindexing can take quite some time .....shell> ``` You may run this script against a specific data query id using `--qid=[data query id]` like ```console shell>php -q poller_reindex_hosts.php --id=All --qid=1 -d WARNING: Do not interrupt this script. Reindexing can take quite some time DEBUG: There are '3' data queries to run DEBUG: Data query number '1' host: '1' SNMP Query Id: '1' starting DEBUG: Data query number '1' host: '1' SNMP Query Id: '1' ending DEBUG: Data query number '2' host: '2' SNMP Query Id: '1' starting DEBUG: Data query number '2' host: '2' SNMP Query Id: '1' ending DEBUG: Data query number '3' host: '15' SNMP Query Id: '1' starting DEBUG: Data query number '3' host: '15' SNMP Query Id: '1' ending ``` It is possible, to select a host based on its host description using `--host-descr=[host description]`. It is allowed to apply an SQL filter expression for the description like `--qid=some%descr`. Use this parameter in conjunction with either `--id=[host id]` or `--qid=[data query id]` or both: ```console shell>php -q poller_reindex_hosts.php --id=All --qid=1 --host-descr=ga%f -d WARNING: Do not interrupt this script. Reindexing can take quite some time DEBUG: There are '1' data queries to run DEBUG: Data query number '1' host: '2' SNMP Query Id: '1' starting DEBUG: Data query number '1' host: '2' SNMP Query Id: '1' ending ``` > **Caution** > > Re-Indexing interferes with the poller operation. Make sure that the poller is > not running and will not start during a reindex operation ## Empty Poller Output Table During normal poller operation, all retrieved results are intermediately stored in the table named poller_output After execution of cmd.php or Spine, this table holds all results. The poller.php finally issues all rrdtool update operations. Thus, after polling has completed, the table should be empty. Conditions may arise, where the table is not (completely) emptied. The most often known issue is lack of php memory. In those cases, the table is bigger than the php memory size, thus not all items are handled correctly. If that issue occurs, you may save all pending updates _after increasing PHP memory appropriately_ by running this very script. Calling the script with the parameter `--help` yields ```console shell>php -q poller_output_empty.php --help Cacti Empty Poller Output Table Script 1.0, Copyright 2004-2023 - The Cacti Group usage: poller_output_empty.php [-h] [--help] [-v] [--version] -v --version - Display this help message -h --help - Display this help message ``` You see, no parameter is required for operating successfully. Under normal circumstances, running this script should yield ```console shell>php -q poller_output_empty.php There were 0, RRD updates made this pass shell> ``` In case, you hit the poller process or if the table was really not fully processed, you may find ```console shell>php -q poller_output_empty.php OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.04 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.00 r:0.05 OK u:0.00 s:0.01 r:0.06 There were 21, RRD updates made this pass shell> ``` If logging level verbosity was switched to `DEBUG` you may find additional debug messages that usually show up in `cacti.log` ## Reapply Suggested Names to Graphs For a general understanding of suggested names used with data queries, please see ?. Be aware, that changes to the `Suggested Names` section of a data query will not automatically be propagated to all existing graphs. This is, where poller_graphs_reapply_names.php drops in. Calling the script with the parameter `--help` yields ```console shell>php -q poller_graphs_reapply_names.php --help Cacti Reapply Graph Names Script 1.0, Copyright 2004-2023 - The Cacti Group usage: poller_graphs_reapply_names.php -id=[host_id|All][host_id1|host_id2|...] [-s=[search_string] [-d] [-h] [--help] [-v] [--version] -id=host_id - The host_id or 'All' or a pipe delimited list of host_id's -s=search_str - A graph template name or graph title to search for -d - Display verbose output during execution -v --version - Display this help message -h --help - Display this help message ``` Assume a situation, where the suggested names where changed for the standard data query named `SNMP - Get Mounted Partitions`. In this case, you will want to rework all graphs for this data query only. A verbose run will yield ```console shell>php -q poller_graphs_reapply_names.php -id=All -d -s="Used space" WARNING: Do not interrupt this script. Interrupting during rename can cause issues DEBUG: There are '6' Graphs to rename DEBUG: Graph Name 'Localhost - Used Space - Memory Buffers' starting DEBUG: Graph Rename Done for Graph 'Localhost - Used Space - Memory Buffers' DEBUG: Graph Name 'Localhost - Used Space - Real Memory' starting DEBUG: Graph Rename Done for Graph 'Localhost - Used Space - Real Memory' DEBUG: Graph Name 'Localhost - Used Space - Swap Space' starting DEBUG: Graph Rename Done for Graph 'Localhost - Used Space - Swap Space' DEBUG: Graph Name 'Localhost - Used Space - /' starting DEBUG: Graph Rename Done for Graph 'Localhost - Used Space - /' DEBUG: Graph Name 'Localhost - Used Space - /sys' starting DEBUG: Graph Rename Done for Graph 'Localhost - Used Space - /sys' DEBUG: Graph Name 'Localhost - Used Space - /boot' starting DEBUG: Graph Rename Done for Graph 'Localhost - Used Space - /boot' ``` Notice the miss-spelling of the word “Space”. The `-s=` option is not case sensitive. ## Copy Local Cacti Users For use and understanding the limitation of this script, it is of importance to read [User Management](User-Management.md) Calling the script with the parameter `--help` yields ```console shell>php -q copy_user.php --help Cacti Copy User Utility, Version 1.2.0, Copyright (C) 2004-2023 The Cacti Group usage: copy_cacti_user.php