I thought about a config snippet but in my case, I am reading log files from an application that is administered by another group in our organization. It becomes the responsibility of this other group to define the instance name. If it is an actual configuration snippet then if they get it wrong, syslog-ng won't start. I have come up with a working solution, although it is a little indirect. 1. Make a small script that takes as its arguments a name and a path-to-file and produces the code snippet @define name "first-word-of-file" If the file does not exist, or as multiple words or other things, then return nothing. 2. Add these two lines to syslog-ng.conf @module confgen context(root) name(myinstance) exec("/path/to/script instance /path/to/instance/file") myinstance() 3. Use the defined value of `instance` in the template template t_my_template { template("<$pri>$parsedate $parsehost ldap: `instance`: $parsemessage\n"); template_escape(no); }; All of the validation/checking is done in the script to ensure that syslog-ng can restart, and it only needs to be invoked at startup/reload. Evan. On 04/23/2014 05:00 PM, Jakub Jankowski wrote:
On 24.04.2014 00:57, Evan Rempel wrote:
I have a use case where I want to preface every message from a source with some kind of instance name. It would be easy to create a static template, but I would like to be able to use the same configuration include on all of the hosts and provide the "instance" name from a local configuration space.
Is there any way to do this kind of thing
@module confgen context(root) name(myinstance) exec("/bin/cat /path/to/instance/file") @define instance "myinstance()" template t_mytemplate { template("<$pri>$parsedate $parsehost ldap: `instance`: $parsemessage\n"); template_escape(no); };
or if the confgen could have a template context
@module confgen context(template) name(myinstance) exec("/bin/cat /path/to/instance/file") template t_mytemplate { template("<$pri>$parsedate $parsehost ldap: $(myinstance): $parsemessage\n"); template_escape(no); };
Hm, why don't you just include a syslog-ng configuration snippet (that sets what you want) from a file that is local to your instance?
Jakub
-- Evan Rempel erempel@uvic.ca Senior Systems Administrator 250.721.7691 Data Centre Services, University Systems, University of Victoria