--- description: "Telegraf plugin for transforming metrics using Filepath" menu: telegraf_v1_ref: parent: processor_plugins_reference name: Filepath identifier: processor-filepath tags: [Filepath, "processor-plugins", "configuration", "transformation"] introduced: "v1.15.0" os_support: "freebsd, linux, macos, solaris, windows" related: - /telegraf/v1/configure_plugins/ - https://github.com/influxdata/telegraf/tree/v1.36.1/plugins/processors/filepath/README.md, Filepath Plugin Source --- # Filepath Processor Plugin This plugin allows transforming a path, using e.g. basename to extract the last path element, for tag and field values. Values can be modified in place or stored in another key. **Introduced in:** Telegraf v1.15.0 **Tags:** transformation **OS support:** all ## Global configuration options In addition to the plugin-specific configuration settings, plugins support additional global and plugin configuration settings. These settings are used to modify metrics, tags, and field or create aliases and configure ordering, etc. See the [CONFIGURATION.md](/telegraf/v1/configuration/#plugins) for more details. [CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins ## Configuration ```toml @sample.conf # Performs file path manipulations on tags and fields [[processors.filepath]] ## Treat the tag value as a path and convert it to its last element, storing the result in a new tag # [[processors.filepath.basename]] # tag = "path" # dest = "basepath" ## Treat the field value as a path and keep all but the last element of path, typically the path's directory # [[processors.filepath.dirname]] # field = "path" ## Treat the tag value as a path, converting it to its the last element without its suffix # [[processors.filepath.stem]] # tag = "path" ## Treat the tag value as a path, converting it to the shortest path name equivalent ## to path by purely lexical processing # [[processors.filepath.clean]] # tag = "path" ## Treat the tag value as a path, converting it to a relative path that is lexically ## equivalent to the source path when joined to 'base_path' # [[processors.filepath.rel]] # tag = "path" # base_path = "/var/log" ## Treat the tag value as a path, replacing each separator character in path with a '/' character. Has only ## effect on Windows # [[processors.filepath.toslash]] # tag = "path" ``` ## Considerations ### Processing order This plugin processes the specified functions in the order they appear in the configuration. One exceptition is the `stem` section which is applied first. If you plan to apply multiple transformations to the same `tag`/`field`, bear in mind the processing order stated above. ### Clean Automatic Invocation Even though `clean` is provided a standalone function, it is also invoked when using the `rel` and `dirname` functions, so there is no need to use it along with them. That is: ```toml [[processors.filepath]] [[processors.filepath.dir]] tag = "path" [[processors.filepath.clean]] tag = "path" ``` Is equivalent to: ```toml [[processors.filepath]] [[processors.filepath.dir]] tag = "path" ``` ### ToSlash Platform-specific Behavior The effects of this function are only noticeable on Windows platforms, because of the underlying golang implementation. ## Examples ### Basename ```toml [[processors.filepath]] [[processors.filepath.basename]] tag = "path" ``` ```diff - my_metric,path="/var/log/batch/ajob.log" duration_seconds=134 1587920425000000000 + my_metric,path="ajob.log" duration_seconds=134 1587920425000000000 ``` ### Dirname ```toml [[processors.filepath]] [[processors.filepath.dirname]] field = "path" dest = "folder" ``` ```diff - my_metric path="/var/log/batch/ajob.log",duration_seconds=134 1587920425000000000 + my_metric path="/var/log/batch/ajob.log",folder="/var/log/batch",duration_seconds=134 1587920425000000000 ``` ### Stem ```toml [[processors.filepath]] [[processors.filepath.stem]] tag = "path" ``` ```diff - my_metric,path="/var/log/batch/ajob.log" duration_seconds=134 1587920425000000000 + my_metric,path="ajob" duration_seconds=134 1587920425000000000 ``` ### Clean ```toml [[processors.filepath]] [[processors.filepath.clean]] tag = "path" ``` ```diff - my_metric,path="/var/log/dummy/../batch//ajob.log" duration_seconds=134 1587920425000000000 + my_metric,path="/var/log/batch/ajob.log" duration_seconds=134 1587920425000000000 ``` ### Rel ```toml [[processors.filepath]] [[processors.filepath.rel]] tag = "path" base_path = "/var/log" ``` ```diff - my_metric,path="/var/log/batch/ajob.log" duration_seconds=134 1587920425000000000 + my_metric,path="batch/ajob.log" duration_seconds=134 1587920425000000000 ``` ### ToSlash ```toml [[processors.filepath]] [[processors.filepath.rel]] tag = "path" ``` ```diff - my_metric,path="\var\log\batch\ajob.log" duration_seconds=134 1587920425000000000 + my_metric,path="/var/log/batch/ajob.log" duration_seconds=134 1587920425000000000 ``` ## Processing paths from tail plugin This plugin can be used together with the tail input plugin For this purpose, we will use the `tail` input plugin, the `grok` parser plugin and the `filepath` processor. ```toml # Performs file path manipulations on tags and fields [[inputs.tail]] files = ["/var/log/myjobs/**.log"] data_format = "grok" grok_patterns = ['%{TIMESTAMP_ISO8601:timestamp:ts-"2006-01-02 15:04:05"} total time execution: %{NUMBER:duration_seconds:int}'] name_override = "myjobs" [[processors.filepath]] [[processors.filepath.stem]] tag = "path" dest = "stempath" ``` The resulting output for a job taking 70 seconds for the mentioned log file would look like: ```text myjobs_duration_seconds,host="my-host",path="/var/log/myjobs/mysql_backup.log",stempath="mysql_backup" 70 1587920425000000000 ```