slogging/doc/source/user/how_slogging_process_logs.rst
Hajime Kondo 93aaa2e511 Fill the diff of installed path among distro in docs
Installed Path is the below.

- On Ubuntu(by apt), /usr/bin
- On Ubuntu(by pip), /usr/local/bin
- On CentOS(by yum), /bin
- On OpenSUSE(by zypper), /usr/bin

Fill the difference in install/user documents.

Change-Id: Idf973ffe99663ed01e84c534309dea219cd71c2b
2018-05-10 10:33:29 +00:00

140 lines
5.1 KiB
ReStructuredText

=================================
How slogging process Swift's logs
=================================
This page shows you how slogging process logs on OpenStack Swift.
Get Installed Path
~~~~~~~~~~~~~~~~~~
You can run the following command to get slogging installed path.::
dirname $(which swift-log-uploader)
The ``<installed-path>`` on this page shall be replaced with the above results.
Log Processing plugins
~~~~~~~~~~~~~~~~~~~~~~
slogging is written to allow a plugin to be defined for
every log type.
slogging includes plugins for both access logs and storage stats logs.
Each plugin is responsible for defining, in a config section, where the logs
are stored on disk, where the logs will be stored in swift (account and
container), the filename format of the logs on disk, the location of the
plugin class definition, and any plugin-specific config values.
You need to define three methods for plugin.
- The ``constructor``. must accept one argument (the dict representation of the plugin's config section).
- The ``process`` method must accept an iterator, and the account, container, and object name of the log.
- The ``keylist_mapping`` accepts no parameters.
Actually, slogging collects following logs from Swift by using plugins.
Log Uploading
~~~~~~~~~~~~~
As a first step to collect stats data from Swift, you need to use ``swift-log-uploader``.
Basically there are three kind of logs.
- :ref:`Access Logs <access-logs>`
- :ref:`Account Logs <stats-logs>`
- :ref:`Container DB Stats Logs <stats-logs>`
You can pass plugin's name as argument of ``swift-log-uploader`` like following.::
<installed-path>/swift-log-uploader /etc/swift/log-processor.conf access
<installed-path>/swift-log-uploader /etc/swift/log-processor.conf stats
<installed-path>/swift-log-uploader /etc/swift/log-processor.conf container-stats
You can set above command as cron job so that you can collect those kind of logs in regular basis.
``swift-log-uploader`` receive a config file and a plugin name(access,
container-stats, stats) through above settings.
Then it finds the log files on disk according to the plugin config section and
uploads them to the swift cluster as source data for :ref:`log-processing`.
This means one uploader process will run on each proxy server node and each
account server node.
To not upload partially-written log files, the uploader will not upload files
with an mtime of less than two hours ago.
.. _access-logs:
Access Logs
-----------
Access logs means the proxy server logs.
For example, a proxy request that is made on August 4, 2010 at 12:37 gets
logged in a file named 2010080412.
This allows easy log rotation and easy per-hour log processing.
To upload access logs, you can set cron like following::
<installed-path>/swift-log-uploader /etc/swift/log-processor.conf access
.. _stats-logs:
Account / Container DB Stats Logs
---------------------------------
You can use ``swift-account-stats-logger`` and ``swift-container-stats-logger``
to collect Account / Container DB stats logs:
``swift-account-stats-logger`` runs on each account server (via cron) and
walks the filesystem looking for account databases. When an account database
is found, the logger selects the account hash, bytes_used, container_count,
and object_count. These values are then written out as one line in a csv file.
One csv file is produced for every run of ``swift-account-stats-logger``.
This means that, system wide, one csv file is produced for every storage node.
Rackspace runs the account stats logger every hour.
If you run account stats logger in every hour and if you have ten account servers,
ten csv files are produced every hour. Also, every account will have one
entry for every replica in the system. On average, there will be three copies
of each account in the aggregate of all account stat csv files created in one
system-wide run.
The ``swift-container-stats-logger`` runs in a similar fashion, scanning
the container dbs.
To upload account stats logs and container stats logs, you can set cron like following::
<installed-path>/swift-log-uploader /etc/swift/log-processor.conf container-stats
<installed-path>/swift-log-uploader /etc/swift/log-processor.conf stats
.. _log-processing:
Log Processing
~~~~~~~~~~~~~~
Log Processing is a kind of final process to create total stats data.
``swift-log-stats-collector`` accepts a config file and generates a csv
that is uploaded to swift.
It loads all plugins defined in the config file,
generates a list of all log files in swift that need to be processed,
and passes an iterable of the log file data to the appropriate plugin's
process method.
The process method returns a dictionary of data in the log file
keyed on (account, year, month, day, hour).
The ``log-stats-collector`` process then combines all dictionaries from
all calls to a process method into one dictionary.
Key collisions within each (account, year, month, day, hour) dictionary are
summed.
Finally, the summed dictionary is mapped to the final csv values with
each plugin's ``keylist_mapping`` method.
The resulting csv file has one line per (account, year, month, day, hour) for
all log files processed in that run of ``swift-log-stats-collector``.