Tuesday, October 11, 2016

Install PostgeSQL on Ubuntu 16.04

Based on https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-16-04

Install PosgreSQL:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
  • Find out where configuration files are stored:

sudo -u postgres psql # use \q to exit

show config_file; # somethis like /etc/postgresql/9.5/main...
\q
  • Cchange in posgresql.config

    • #listen_addresses = 'localhost' # what IP address(es) to listen on;
    • to listen_addresses = '*' # what IP address(es) to listen on;
  • Add in pg_hba.conf

    • host all all 10.0.0.0/8 md5 Change through psql the password for database login postgres:
    • \password postgres
  • Restart postgresql:

    • exit (to logout from postgres user session)
    • systemctl restart postgreql
IyBJbnN0YWxsIFBvc3RnZVNRTCBvbiBVYnVudHUgMTYuMDQNCg0KQmFzZWQgb24gW2h0dHBzOi8vd3d3LmRpZ2l0YWxvY2Vhbi5jb20vY29tbXVuaXR5L3R1dG9yaWFscy9ob3ctdG8taW5zdGFsbC1hbmQtdXNlLXBvc3RncmVzcWwtb24tdWJ1bnR1LTE2LTA0XShodHRwczovL3d3dy5kaWdpdGFsb2NlYW4uY29tL2NvbW11bml0eS90dXRvcmlhbHMvaG93LXRvLWluc3RhbGwtYW5kLXVzZS1wb3N0Z3Jlc3FsLW9uLXVidW50dS0xNi0wNCAiSW5zdGFsbCIpDQoNCkluc3RhbGwgUG9zZ3JlU1FMOg0KYGBgDQpzdWRvIGFwdC1nZXQgdXBkYXRlDQpzdWRvIGFwdC1nZXQgaW5zdGFsbCBwb3N0Z3Jlc3FsIHBvc3RncmVzcWwtY29udHJpYg0KYGBgDQoNCi0gRmluZCBvdXQgd2hlcmUgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc3RvcmVkOg0KDQpzdWRvIC11IHBvc3RncmVzIHBzcWwgIyB1c2UgXHEgdG8gZXhpdA0KDQpgYGANCnNob3cgY29uZmlnX2ZpbGU7ICMgc29tZXRoaXMgbGlrZSAvZXRjL3Bvc3RncmVzcWwvOS41L21haW4uLi4NClxxDQpgYGANCg0KLSBDY2hhbmdlIGluIHBvc2dyZXNxbC5jb25maWcNCgktIGAjbGlzdGVuX2FkZHJlc3NlcyA9ICdsb2NhbGhvc3QnCQkjIHdoYXQgSVAgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uO2ANCgktIHRvIGBsaXN0ZW5fYWRkcmVzc2VzID0gJyonCQkjIHdoYXQgSVAgYWRkcmVzcyhlcykgdG8gbGlzdGVuIG9uO2ANCg0KLSBBZGQgaW4gcGdfaGJhLmNvbmYNCgktIGhvc3QgICAgYWxsICAgICAgICAgICAgIGFsbCAgICAgICAgICAgICAxMC4wLjAuMC84ICAgICAgICAgICAgICBtZDUNCkNoYW5nZSB0aHJvdWdoIGBwc3FsYCB0aGUgcGFzc3dvcmQgZm9yIGRhdGFiYXNlIGxvZ2luIHBvc3RncmVzOg0KCS0gXHBhc3N3b3JkIHBvc3RncmVzDQoNCi0gUmVzdGFydCBwb3N0Z3Jlc3FsOg0KCS0gZXhpdCAodG8gbG9nb3V0IGZyb20gcG9zdGdyZXMgdXNlciBzZXNzaW9uKQ0KCS0gc3lzdGVtY3RsIHJlc3RhcnQgcG9zdGdyZXFs

Install Wildfly 10.1 on Ubuntu Server 16.04

Install Wildfly 10.1 on Ubuntu 16.04

Be sure to use the same Java version as the one used as compilation target of generated WAR.

Run the following script:

sudo apt-get update
apt install software-properties-common
add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

cd /tmp
wget http://download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.tar.gz
tar -xzvf wildfly-10.1.0.Final.tar.gz
mv wildfly-10.1.0.Final wildfly
cp -R  wildfly /opt/

groupadd -r wildfly
useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly
chown -R wildfly:wildfly /opt/wildfly

cd wildfly/docs/contrib/scripts/systemd

mkdir /etc/wildfly
cp wildfly.conf /etc/wildfly/
cp wildfly.service /etc/systemd/system/
cp launch.sh /opt/wildfly/bin/
chmod +x /opt/wildfly/bin/launch.sh

# do not launch wildfly through standalone.sh->it will screw up file permissions

systemctl start wildfly.service
systemctl enable wildfly.service
  • Watch out for CRLF EndOfLine (should be just LFs)
  • Check that Wildfly is running through systemctl status wildfly

In order to check from outside current VM/physical machine that Wildfly was started change standalone.xml content so that:

        <interface name="public">
            <any-address/>
        </interface>

There might be required some other changes to the default distribution. Besure that wildfly user is owner all added items (chown -R wildfly:wildfly /opt/wildfly/modules)

Add EclipseLink Support

  • Download eclipselink.jar to modules\system\layers\base\org\eclipse\persistence\main
  • Change module.xml so that:
    <resources>
        <resource-root path="jipijapa-eclipselink-10.1.0.Final.jar"/>
        <resource-root path="eclipselink.jar">
            <filter>
                <exclude path="javax/**" />
            </filter>
        </resource-root>
    </resources>

Add SQL Server support

  • Create modules\system\layers\base\com\microsoft\sqlserver\jdbc\main
  • Download sqljdbc4.jar
  • Create module.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver.jdbc">
    <resources>
        <resource-root path="sqljdbc4.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

Add PostgreSQL Support

  • Create modules\system\layers\base\org\postgresql\main
  • Download latest JDBC PostgreSQL driver
  • Create module.xml(change driver name acordingly):
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="org.postgresql">
    <resources>
        <!-- Make sure this matches the name of the JAR you are installing -->
        <resource-root path="postgresql-9.4-1202.jdbc4.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>

Restart Wildfly...

Velocity Note

If some of the used components in generated WAR use Velocity you will encounter the following error in server.log (during hot deployment or Wildfly restart): Error configuring AvalonLogSystem : java.io.FileNotFoundException: /velocity.log (Permission denied). This is due to the fact that velocity.properties (as found in velocity jar, path org\apache\velocity\runtime\defaults\ states:

runtime.log = velocity.log

The quick solution is to create an empty velocity.log file in the root of your file system with full access (?) for wildfly user.

IyBJbnN0YWxsIFdpbGRmbHkgMTAuMSBvbiBVYnVudHUgMTYuMDQNCg0KKipCZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSBKYXZhIHZlcnNpb24gYXMgdGhlIG9uZSB1c2VkIGFzIGNvbXBpbGF0aW9uIHRhcmdldCBvZiBnZW5lcmF0ZWQgV0FSLioqDQoNClJ1biB0aGUgZm9sbG93aW5nIHNjcmlwdDoNCmBgYA0Kc3VkbyBhcHQtZ2V0IHVwZGF0ZQ0KYXB0IGluc3RhbGwgc29mdHdhcmUtcHJvcGVydGllcy1jb21tb24NCmFkZC1hcHQtcmVwb3NpdG9yeSBwcGE6d2VidXBkOHRlYW0vamF2YQ0Kc3VkbyBhcHQtZ2V0IHVwZGF0ZQ0Kc3VkbyBhcHQtZ2V0IGluc3RhbGwgb3JhY2xlLWphdmE4LWluc3RhbGxlcg0KDQpjZCAvdG1wDQp3Z2V0IGh0dHA6Ly9kb3dubG9hZC5qYm9zcy5vcmcvd2lsZGZseS8xMC4xLjAuRmluYWwvd2lsZGZseS0xMC4xLjAuRmluYWwudGFyLmd6DQp0YXIgLXh6dmYgd2lsZGZseS0xMC4xLjAuRmluYWwudGFyLmd6DQptdiB3aWxkZmx5LTEwLjEuMC5GaW5hbCB3aWxkZmx5DQpjcCAtUiAgd2lsZGZseSAvb3B0Lw0KDQpncm91cGFkZCAtciB3aWxkZmx5DQp1c2VyYWRkIC1yIC1nIHdpbGRmbHkgLWQgL29wdC93aWxkZmx5IC1zIC9zYmluL25vbG9naW4gd2lsZGZseQ0KY2hvd24gLVIgd2lsZGZseTp3aWxkZmx5IC9vcHQvd2lsZGZseQ0KDQpjZCB3aWxkZmx5L2RvY3MvY29udHJpYi9zY3JpcHRzL3N5c3RlbWQNCg0KbWtkaXIgL2V0Yy93aWxkZmx5DQpjcCB3aWxkZmx5LmNvbmYgL2V0Yy93aWxkZmx5Lw0KY3Agd2lsZGZseS5zZXJ2aWNlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vDQpjcCBsYXVuY2guc2ggL29wdC93aWxkZmx5L2Jpbi8NCmNobW9kICt4IC9vcHQvd2lsZGZseS9iaW4vbGF1bmNoLnNoDQoNCiMgZG8gbm90IGxhdW5jaCB3aWxkZmx5IHRocm91Z2ggc3RhbmRhbG9uZS5zaC0+aXQgd2lsbCBzY3JldyB1cCBmaWxlIHBlcm1pc3Npb25zDQoNCnN5c3RlbWN0bCBzdGFydCB3aWxkZmx5LnNlcnZpY2UNCnN5c3RlbWN0bCBlbmFibGUgd2lsZGZseS5zZXJ2aWNlDQpgYGANCg0KLSBXYXRjaCBvdXQgZm9yIENSTEYgRW5kT2ZMaW5lIChzaG91bGQgYmUganVzdCBMRnMpDQotIENoZWNrIHRoYXQgV2lsZGZseSBpcyBydW5uaW5nIHRocm91Z2ggYHN5c3RlbWN0bCBzdGF0dXMgd2lsZGZseWANCg0KSW4gb3JkZXIgdG8gY2hlY2sgZnJvbSBvdXRzaWRlIGN1cnJlbnQgVk0vcGh5c2ljYWwgbWFjaGluZSB0aGF0IFdpbGRmbHkgd2FzIHN0YXJ0ZWQgY2hhbmdlIHN0YW5kYWxvbmUueG1sIGNvbnRlbnQgc28gdGhhdDoNCmBgYHhtbA0KICAgICAgICA8aW50ZXJmYWNlIG5hbWU9InB1YmxpYyI+DQogICAgICAgICAgICA8YW55LWFkZHJlc3MvPg0KICAgICAgICA8L2ludGVyZmFjZT4NCmBgYA0KVGhlcmUgbWlnaHQgYmUgcmVxdWlyZWQgc29tZSBvdGhlciBjaGFuZ2VzIHRvIHRoZSBkZWZhdWx0IGRpc3RyaWJ1dGlvbi4gQmVzdXJlIHRoYXQgd2lsZGZseSB1c2VyIGlzIG93bmVyIGFsbCBhZGRlZCBpdGVtcyAoYGNob3duIC1SIHdpbGRmbHk6d2lsZGZseSAvb3B0L3dpbGRmbHkvbW9kdWxlc2ApDQoNCiMjIEFkZCBFY2xpcHNlTGluayBTdXBwb3J0DQoNCi0gRG93bmxvYWQgZWNsaXBzZWxpbmsuamFyIHRvIGBtb2R1bGVzXHN5c3RlbVxsYXllcnNcYmFzZVxvcmdcZWNsaXBzZVxwZXJzaXN0ZW5jZVxtYWluYA0KLSBDaGFuZ2UgYG1vZHVsZS54bWxgIHNvIHRoYXQ6DQpgYGB4bWwNCiAgICA8cmVzb3VyY2VzPg0KICAgICAgICA8cmVzb3VyY2Utcm9vdCBwYXRoPSJqaXBpamFwYS1lY2xpcHNlbGluay0xMC4xLjAuRmluYWwuamFyIi8+DQoJCTxyZXNvdXJjZS1yb290IHBhdGg9ImVjbGlwc2VsaW5rLmphciI+DQoJCQk8ZmlsdGVyPg0KCQkJCTxleGNsdWRlIHBhdGg9ImphdmF4LyoqIiAvPg0KCQkJPC9maWx0ZXI+DQoJCTwvcmVzb3VyY2Utcm9vdD4NCiAgICA8L3Jlc291cmNlcz4NCmBgYA0KDQojIyBBZGQgU1FMIFNlcnZlciBzdXBwb3J0DQoNCi0gQ3JlYXRlIGBtb2R1bGVzXHN5c3RlbVxsYXllcnNcYmFzZVxjb21cbWljcm9zb2Z0XHNxbHNlcnZlclxqZGJjXG1haW5gDQotIERvd25sb2FkIGBzcWxqZGJjNC5qYXJgDQotIENyZWF0ZSBgbW9kdWxlLnhtbGA6DQpgYGB4bWwNCjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQo8bW9kdWxlIHhtbG5zPSJ1cm46amJvc3M6bW9kdWxlOjEuMyIgbmFtZT0iY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYyI+DQogICAgPHJlc291cmNlcz4NCiAgICAgICAgPHJlc291cmNlLXJvb3QgcGF0aD0ic3FsamRiYzQuamFyIi8+DQogICAgPC9yZXNvdXJjZXM+DQogICAgPGRlcGVuZGVuY2llcz4NCiAgICAgICAgPG1vZHVsZSBuYW1lPSJqYXZheC5hcGkiLz4NCiAgICAgICAgPG1vZHVsZSBuYW1lPSJqYXZheC50cmFuc2FjdGlvbi5hcGkiLz4NCiAgICA8L2RlcGVuZGVuY2llcz4NCjwvbW9kdWxlPg0KYGBgIA0KDQojIyBBZGQgUG9zdGdyZVNRTCBTdXBwb3J0DQoNCg0KLSBDcmVhdGUgYG1vZHVsZXNcc3lzdGVtXGxheWVyc1xiYXNlXG9yZ1xwb3N0Z3Jlc3FsXG1haW5gDQotIERvd25sb2FkIGxhdGVzdCBKREJDIFBvc3RncmVTUUwgZHJpdmVyDQotIENyZWF0ZSBgbW9kdWxlLnhtbGAoY2hhbmdlIGRyaXZlciBuYW1lIGFjb3JkaW5nbHkpOg0KYGBgeG1sDQo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KPG1vZHVsZSB4bWxucz0idXJuOmpib3NzOm1vZHVsZToxLjMiIG5hbWU9Im9yZy5wb3N0Z3Jlc3FsIj4NCiAgICA8cmVzb3VyY2VzPg0KICAgICAgICA8IS0tIE1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgdGhlIG5hbWUgb2YgdGhlIEpBUiB5b3UgYXJlIGluc3RhbGxpbmcgLS0+DQogICAgICAgIDxyZXNvdXJjZS1yb290IHBhdGg9InBvc3RncmVzcWwtOS40LTEyMDIuamRiYzQuamFyIi8+DQogICAgPC9yZXNvdXJjZXM+DQogICAgPGRlcGVuZGVuY2llcz4NCiAgICAgICAgPG1vZHVsZSBuYW1lPSJqYXZheC5hcGkiLz4NCiAgICAgICAgPG1vZHVsZSBuYW1lPSJqYXZheC50cmFuc2FjdGlvbi5hcGkiLz4NCiAgICAgICAgPG1vZHVsZSBuYW1lPSJqYXZheC5zZXJ2bGV0LmFwaSIgb3B0aW9uYWw9InRydWUiLz4NCiAgICA8L2RlcGVuZGVuY2llcz4NCjwvbW9kdWxlPg0KYGBgDQoNCiMjIFJlc3RhcnQgV2lsZGZseS4uLg0KDQojIyBWZWxvY2l0eSBOb3RlDQoNCklmIHNvbWUgb2YgdGhlIHVzZWQgY29tcG9uZW50cyBpbiBnZW5lcmF0ZWQgV0FSIHVzZSBWZWxvY2l0eSB5b3Ugd2lsbCBlbmNvdW50ZXIgdGhlIGZvbGxvd2luZyBlcnJvciBpbiBzZXJ2ZXIubG9nIChkdXJpbmcgaG90IGRlcGxveW1lbnQgb3IgV2lsZGZseSByZXN0YXJ0KTogYEVycm9yIGNvbmZpZ3VyaW5nIEF2YWxvbkxvZ1N5c3RlbSA6IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOiAvdmVsb2NpdHkubG9nIChQZXJtaXNzaW9uIGRlbmllZClgLiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHZlbG9jaXR5LnByb3BlcnRpZXMgKGFzIGZvdW5kIGluIHZlbG9jaXR5IGphciwgcGF0aCBgb3JnXGFwYWNoZVx2ZWxvY2l0eVxydW50aW1lXGRlZmF1bHRzXGAgc3RhdGVzOg0KYGBgDQpydW50aW1lLmxvZyA9IHZlbG9jaXR5LmxvZw0KYGBgDQpUaGUgcXVpY2sgc29sdXRpb24gaXMgdG8gY3JlYXRlIGFuIGVtcHR5IGB2ZWxvY2l0eS5sb2dgIGZpbGUgaW4gdGhlIHJvb3Qgb2YgeW91ciBmaWxlIHN5c3RlbSB3aXRoIGZ1bGwgYWNjZXNzICg/KSBmb3Igd2lsZGZseSB1c2VyLg0KIA==

Thursday, October 6, 2016

Graylog2 & MongoDB

Graylog uses an instance of MongoDB as a configuration repository. Browsing data can be done (for instance) by using Robomango:

  • Install Robomango, free edition (Robomango)
  • Configure a connection, providing Address (IP or FQDN) and Port (27017)
  • Happy browsing!
R3JheWxvZyB1c2VzIGFuIGluc3RhbmNlIG9mIE1vbmdvREIgYXMgYSBjb25maWd1cmF0aW9uIHJlcG9zaXRvcnkuIEJyb3dzaW5nIGRhdGEgY2FuIGJlIGRvbmUgKGZvciBpbnN0YW5jZSkgYnkgdXNpbmcgUm9ib21hbmdvOg0KDQotIEluc3RhbGwgUm9ib21hbmdvLCBmcmVlIGVkaXRpb24gKFtSb2JvbWFuZ29dKGh0dHBzOi8vcm9ib21vbmdvLm9yZy9idXkpKQ0KLSBDb25maWd1cmUgYSBjb25uZWN0aW9uLCBwcm92aWRpbmcgQWRkcmVzcyAoSVAgb3IgRlFETikgYW5kIFBvcnQgKDI3MDE3KQ0KLSBIYXBweSBicm93c2luZyE=

Graylog2 Rules

Running server side rules that drop/enrich messages is quite simple:

  • edit /opt/graylog/conf/graylog.conf by adding the following line rules_file = /opt/graylog/conf/rules.drl (there is special empty section starting with the comment # Drools Rule File (Use to rewrite incoming log messages)
  • add /opt/graylog/conf/rules.drl file with the appropriate content
  • restart graylog (sudo graylog-ctl start, etc.)

Sample rules file

import org.graylog2.plugin.Message
import java.util.regex.Matcher
import java.util.regex.Pattern

rule "WildFly10"
  when
      m : Message( getField("source_id") == "WildFly10" )
  then
      Matcher matcher = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2},\\d{3}\\s(\\w+)").matcher(m.getMessage());
      if (matcher.find()) {
         m.addField("event-level", matcher.group(1));
      }
end
UnVubmluZyBzZXJ2ZXIgc2lkZSBydWxlcyB0aGF0IGRyb3AvZW5yaWNoIG1lc3NhZ2VzIGlzIHF1aXRlIHNpbXBsZToNCg0KLSBlZGl0IGAvb3B0L2dyYXlsb2cvY29uZi9ncmF5bG9nLmNvbmZgIGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIGxpbmUgYHJ1bGVzX2ZpbGUgPSAvb3B0L2dyYXlsb2cvY29uZi9ydWxlcy5kcmxgICh0aGVyZSBpcyBzcGVjaWFsIGVtcHR5IHNlY3Rpb24gc3RhcnRpbmcgd2l0aCB0aGUgY29tbWVudCBgIyBEcm9vbHMgUnVsZSBGaWxlIChVc2UgdG8gcmV3cml0ZSBpbmNvbWluZyBsb2cgbWVzc2FnZXMpYA0KLSBhZGQgYC9vcHQvZ3JheWxvZy9jb25mL3J1bGVzLmRybGAgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50DQotIHJlc3RhcnQgZ3JheWxvZyAoYHN1ZG8gZ3JheWxvZy1jdGwgc3RhcnRgLCBldGMuKQ0KDQpTYW1wbGUgcnVsZXMgZmlsZQ0KYGBgDQppbXBvcnQgb3JnLmdyYXlsb2cyLnBsdWdpbi5NZXNzYWdlDQppbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXINCmltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybg0KDQpydWxlICJXaWxkRmx5MTAiDQogIHdoZW4NCiAgICAgIG0gOiBNZXNzYWdlKCBnZXRGaWVsZCgic291cmNlX2lkIikgPT0gIldpbGRGbHkxMCIgKQ0KICB0aGVuDQogICAgICBNYXRjaGVyIG1hdGNoZXIgPSBQYXR0ZXJuLmNvbXBpbGUoIl5cXGR7NH0tXFxkezJ9LVxcZHsyfVxcc1xcZHsyfTpcXGR7Mn06XFxkezJ9LFxcZHszfVxccyhcXHcrKSIpLm1hdGNoZXIobS5nZXRNZXNzYWdlKCkpOw0KICAgICAgaWYgKG1hdGNoZXIuZmluZCgpKSB7DQogICAgICAgICBtLmFkZEZpZWxkKCJldmVudC1sZXZlbCIsIG1hdGNoZXIuZ3JvdXAoMSkpOw0KICAgICAgfQ0KZW5kDQpgYGANCg==

Graylog2 Collector

The new approach

Server side controlled configuration

Staring with Graylog 2 the a new collector approach (Graylog Collector Sidecar) is proposed, based on wrapping NXLog.

Installation is straightforward, as indicated in online documents (sample for Windows, a later post might share Ubuntu experience).

Install NXLog:

  • Download NXLog Windows installation kit NXLog downloads
  • Run the installer
  • Run (as an administrator) "C:\Program Files (x86)\nxlog\nxlog.exe" -u; this will un-install nxlog as a service but will keep binaries

Now download and install latest collector-sidecar binaries (Collector-Sidecar releases)

Before installing/starting the collector as a service:

  • On the server administration site go to System->Collectors->Manage Configurations
  • Add a configuration with a meaningful name
    • Add one or more relevant tags
    • Add an Output (by choosing from already configured Inputs)
    • Add one or more inputs; for file type inputs you can check the multi-line option and provide a RegEx for the start pattern, like /^\d{2}\.\d{2}\.\d{4}/ (notice enclosing slashes!)

Go back to the monitored computer and edit C:\Program Files (x86)\graylog\collector-sidecar\collector-sidecar.yaml:

  • update server_url
  • update to a meaningful name the node_id
  • add one of the tags previously defined in the tags list
  • install and start the service (run as administrator):
    • "C:\Program Files (x86)\graylog\collector-sidecar\graylog-collector-sidecar.exe" -service install
    • "C:\Program Files (x86)\graylog\collector-sidecar\graylog-collector-sidecar.exe" -service start

*Service can be started/stopped also from Task manager (Services tab, collector-sidecar Name) or from Services Manager (Graylog collector sidecar Display name).

Now we should have automatically created, based on the previously defined configuration, the nxlog configuration file C:\Program Files (x86)\graylog\collector-sidecar\generated\nxlog.conf and in administration site the collector should be listed in System->Collectors section.

Please notice that if there is some error in the yaml configuration file the service will not start and no error message will be logged (it happened to me if I commented the tags list, see next section)

Locally controlled configuration

Under certain conditions you might need to use advanced NXLog features which are not supported by the server side configuration. You can do the following trick:

  • Start with the approach described in the previous section and check that everything goes fine; at this moment we should have a valid NXLog configuration file
  • Move the configuration file in another directory and change the configuration_path value to that file
  • Remove all valid tags and add a dummy one that does not exists in server side configuration; do not remove the tags entry or leave the list empty since the collector will not start and no error message will be logged
  • Restart the collector-sidecar service
  • If everything works as expected, read carefully the NXLog manual and do your own enhancements to the configuration
  • Restart the collector-sidecar service

I applied the approach because I needed an aditional message field (Exec $source_id = 'WildFly10';) source_id for one of the inputs, like shown below.

<Input 576d1d3d659fb107f722db38>
    Module im_file
    File "C:\Java\wildfly-10.0.0.Final\standalone\log\server.log"
    PollInterval 1
    SavePos True
    ReadFromLast True
    Recursive False
    RenameCheck False
    Exec $FileName = file_name(); # Send file name with each message
    Exec $source_id = 'WildFly10';
    InputType 576d1d3d659fb107f722db38-multiline
</Input>

The full yaml configuration file content:

server_url: http://graylog.mycompany.local:12900
tls_skip_verify: false
node_id: graylog-collector-sidecar-devsrv
collector_id: file:C:\Program Files (x86)\graylog\collector-sidecar\collector-id
tags:
    - undefined
log_path: C:\Program Files (x86)\graylog\collector-sidecar
update_interval: 10
backends:
    - name: nxlog
      enabled: true
      binary_path: C:\Program Files (x86)\nxlog\nxlog.exe
#      configuration_path: C:\Program Files (x86)\graylog\collector-sidecar\generated\nxlog.conf
      configuration_path: C:\Program Files (x86)\graylog\collector-sidecar\conf\nxlog.conf

As an alternate approach (I haven't tested but it should work) is to go for the first option (server side controlled configuration) but instead of defining Outputs/Inputs just place all nxlog.conf content in the default nxlog snippet, in the Windows section. Be sure you have in sync the collector side client_id with the one in the nxlog.conf content, Output section (see Exec $gl2_source_collector = '0324bd79-b9a9-458e-9977-d0eecbd2d347';):

<Output 576cf426659fb107f722b011>
    Module om_tcp
    Host graylog.mycompany.local
    Port 12201
    OutputType  GELF_TCP
    Exec $short_message = $raw_event; # Avoids truncation of the short_message field.
    Exec $gl2_source_collector = '0324bd79-b9a9-458e-9977-d0eecbd2d347';
    Exec $Hostname = hostname_fqdn();
</Output>

Duplicate configuration on another server

Once we have a collector configured we can duplicate easily the installation on another one:

  • Perform the NXLog installation steps
  • Install the collector-sidecar (just run the setup)
  • Copy yaml and nxlog.conf files on the target server
  • Change the yaml to reflect the right node_id
  • Change the content of the collector-id with some unique string (a GUID?)
  • Change the nxlog.conf Output tag to reflect the collector-id value
IyBUaGUgbmV3IGFwcHJvYWNoDQoNCiMjIFNlcnZlciBzaWRlIGNvbnRyb2xsZWQgY29uZmlndXJhdGlvbg0KDQpTdGFyaW5nIHdpdGggR3JheWxvZyAyIHRoZSBhIG5ldyBjb2xsZWN0b3IgYXBwcm9hY2ggKGBHcmF5bG9nIENvbGxlY3RvciBTaWRlY2FyYCkgaXMgcHJvcG9zZWQsIGJhc2VkIG9uIHdyYXBwaW5nIGBOWExvZ2AuDQoNCkluc3RhbGxhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQsIGFzIGluZGljYXRlZCBpbiBvbmxpbmUgZG9jdW1lbnRzIChzYW1wbGUgZm9yIFdpbmRvd3MsIGEgbGF0ZXIgcG9zdCBtaWdodCBzaGFyZSBVYnVudHUgZXhwZXJpZW5jZSkuDQoNCkluc3RhbGwgTlhMb2c6DQoNCi0gRG93bmxvYWQgTlhMb2cgV2luZG93cyBpbnN0YWxsYXRpb24ga2l0IFtOWExvZyBkb3dubG9hZHNdKGh0dHBzOi8vbnhsb2cub3JnL3Byb2R1Y3RzL254bG9nLWNvbW11bml0eS1lZGl0aW9uL2Rvd25sb2FkICJOWExvZyBkb3dubG9hZHMiKQ0KLSBSdW4gdGhlIGluc3RhbGxlcg0KLSBSdW4gKGFzIGFuIGFkbWluaXN0cmF0b3IpIGAiQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxueGxvZ1xueGxvZy5leGUiIC11YDsgdGhpcyB3aWxsIHVuLWluc3RhbGwgYG54bG9nYCBhcyBhIHNlcnZpY2UgYnV0IHdpbGwga2VlcCBiaW5hcmllcw0KDQpOb3cgZG93bmxvYWQgYW5kIGluc3RhbGwgbGF0ZXN0IGNvbGxlY3Rvci1zaWRlY2FyIGJpbmFyaWVzIChbQ29sbGVjdG9yLVNpZGVjYXIgcmVsZWFzZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9HcmF5bG9nMi9jb2xsZWN0b3Itc2lkZWNhci9yZWxlYXNlcykpDQoNCkJlZm9yZSBpbnN0YWxsaW5nL3N0YXJ0aW5nIHRoZSBjb2xsZWN0b3IgYXMgYSBzZXJ2aWNlOg0KDQotIE9uIHRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRpb24gc2l0ZSBnbyB0byBTeXN0ZW0tPkNvbGxlY3RvcnMtPk1hbmFnZSBDb25maWd1cmF0aW9ucw0KLSBBZGQgYSBjb25maWd1cmF0aW9uIHdpdGggYSBtZWFuaW5nZnVsIG5hbWUNCgktIEFkZCBvbmUgb3IgbW9yZSByZWxldmFudCB0YWdzDQoJLSBBZGQgYW4gT3V0cHV0IChieSBjaG9vc2luZyBmcm9tIGFscmVhZHkgY29uZmlndXJlZCBJbnB1dHMpDQoJLSBBZGQgb25lIG9yIG1vcmUgaW5wdXRzOyBmb3IgZmlsZSB0eXBlIGlucHV0cyB5b3UgY2FuIGNoZWNrIHRoZSBtdWx0aS1saW5lIG9wdGlvbiBhbmQgcHJvdmlkZSBhIFJlZ0V4IGZvciB0aGUgc3RhcnQgcGF0dGVybiwgbGlrZSBgL15cZHsyfVwuXGR7Mn1cLlxkezR9L2AgKG5vdGljZSBlbmNsb3Npbmcgc2xhc2hlcyEpDQoNCkdvIGJhY2sgdG8gdGhlIG1vbml0b3JlZCBjb21wdXRlciBhbmQgZWRpdCBgQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxncmF5bG9nXGNvbGxlY3Rvci1zaWRlY2FyXGNvbGxlY3Rvci1zaWRlY2FyLnlhbWxgOg0KDQotIHVwZGF0ZSBzZXJ2ZXJfdXJsDQotIHVwZGF0ZSB0byBhIG1lYW5pbmdmdWwgbmFtZSB0aGUgbm9kZV9pZA0KLSBhZGQgb25lIG9mIHRoZSB0YWdzIHByZXZpb3VzbHkgZGVmaW5lZCBpbiB0aGUgdGFncyBsaXN0DQotIGluc3RhbGwgYW5kIHN0YXJ0IHRoZSBzZXJ2aWNlIChydW4gYXMgYWRtaW5pc3RyYXRvcik6DQoJLSBgIkM6XFByb2dyYW0gRmlsZXMgKHg4NilcZ3JheWxvZ1xjb2xsZWN0b3Itc2lkZWNhclxncmF5bG9nLWNvbGxlY3Rvci1zaWRlY2FyLmV4ZSIgLXNlcnZpY2UgaW5zdGFsbGANCgktIGAiQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxncmF5bG9nXGNvbGxlY3Rvci1zaWRlY2FyXGdyYXlsb2ctY29sbGVjdG9yLXNpZGVjYXIuZXhlIiAtc2VydmljZSBzdGFydGANCg0KKlNlcnZpY2UgY2FuIGJlIHN0YXJ0ZWQvc3RvcHBlZCBhbHNvIGZyb20gVGFzayBtYW5hZ2VyIChTZXJ2aWNlcyB0YWIsIGBjb2xsZWN0b3Itc2lkZWNhcmAgTmFtZSkgb3IgZnJvbSBTZXJ2aWNlcyBNYW5hZ2VyIChgR3JheWxvZyBjb2xsZWN0b3Igc2lkZWNhcmAgRGlzcGxheSBuYW1lKS4NCg0KTm93IHdlIHNob3VsZCBoYXZlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCwgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBjb25maWd1cmF0aW9uLCB0aGUgbnhsb2cgY29uZmlndXJhdGlvbiBmaWxlIGBDOlxQcm9ncmFtIEZpbGVzICh4ODYpXGdyYXlsb2dcY29sbGVjdG9yLXNpZGVjYXJcZ2VuZXJhdGVkXG54bG9nLmNvbmZgIGFuZCBpbiBhZG1pbmlzdHJhdGlvbiBzaXRlIHRoZSBjb2xsZWN0b3Igc2hvdWxkIGJlIGxpc3RlZCBpbiBTeXN0ZW0tPkNvbGxlY3RvcnMgc2VjdGlvbi4NCg0KUGxlYXNlIG5vdGljZSB0aGF0IGlmIHRoZXJlIGlzIHNvbWUgZXJyb3IgaW4gdGhlIHlhbWwgY29uZmlndXJhdGlvbiBmaWxlIHRoZSBzZXJ2aWNlIHdpbGwgbm90IHN0YXJ0IGFuZCBubyBlcnJvciBtZXNzYWdlIHdpbGwgYmUgbG9nZ2VkIChpdCBoYXBwZW5lZCB0byBtZSBpZiBJIGNvbW1lbnRlZCB0aGUgdGFncyBsaXN0LCBzZWUgbmV4dCBzZWN0aW9uKQ0KDQojIyBMb2NhbGx5IGNvbnRyb2xsZWQgY29uZmlndXJhdGlvbg0KDQpVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgeW91IG1pZ2h0IG5lZWQgdG8gdXNlIGFkdmFuY2VkIE5YTG9nIGZlYXR1cmVzIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgc2lkZSBjb25maWd1cmF0aW9uLiBZb3UgY2FuIGRvIHRoZSBmb2xsb3dpbmcgdHJpY2s6DQotIFN0YXJ0IHdpdGggdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiBhbmQgY2hlY2sgdGhhdCBldmVyeXRoaW5nIGdvZXMgZmluZTsgYXQgdGhpcyBtb21lbnQgd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBOWExvZyBjb25maWd1cmF0aW9uIGZpbGUNCi0gTW92ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluIGFub3RoZXIgZGlyZWN0b3J5IGFuZCBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb25fcGF0aCB2YWx1ZSB0byB0aGF0IGZpbGUNCi0gUmVtb3ZlIGFsbCB2YWxpZCB0YWdzIGFuZCBhZGQgYSBkdW1teSBvbmUgdGhhdCBkb2VzIG5vdCBleGlzdHMgaW4gc2VydmVyIHNpZGUgY29uZmlndXJhdGlvbjsgZG8gbm90IHJlbW92ZSB0aGUgdGFncyBlbnRyeSBvciBsZWF2ZSB0aGUgbGlzdCBlbXB0eSBzaW5jZSB0aGUgY29sbGVjdG9yIHdpbGwgbm90IHN0YXJ0IGFuZCBubyBlcnJvciBtZXNzYWdlIHdpbGwgYmUgbG9nZ2VkDQotIFJlc3RhcnQgdGhlIGNvbGxlY3Rvci1zaWRlY2FyIHNlcnZpY2UNCi0gSWYgZXZlcnl0aGluZyB3b3JrcyBhcyBleHBlY3RlZCwgcmVhZCBjYXJlZnVsbHkgdGhlIE5YTG9nIG1hbnVhbCBhbmQgZG8geW91ciBvd24gZW5oYW5jZW1lbnRzIHRvIHRoZSBjb25maWd1cmF0aW9uDQotIFJlc3RhcnQgdGhlIGNvbGxlY3Rvci1zaWRlY2FyIHNlcnZpY2UNCg0KSSBhcHBsaWVkIHRoZSBhcHByb2FjaCBiZWNhdXNlIEkgbmVlZGVkIGFuIGFkaXRpb25hbCBtZXNzYWdlIGZpZWxkIChgRXhlYyAkc291cmNlX2lkID0gJ1dpbGRGbHkxMCc7YCkgc291cmNlX2lkIGZvciBvbmUgb2YgdGhlIGlucHV0cywgbGlrZSBzaG93biBiZWxvdy4NCmBgYA0KPElucHV0IDU3NmQxZDNkNjU5ZmIxMDdmNzIyZGIzOD4NCglNb2R1bGUgaW1fZmlsZQ0KCUZpbGUgIkM6XEphdmFcd2lsZGZseS0xMC4wLjAuRmluYWxcc3RhbmRhbG9uZVxsb2dcc2VydmVyLmxvZyINCglQb2xsSW50ZXJ2YWwgMQ0KCVNhdmVQb3MJVHJ1ZQ0KCVJlYWRGcm9tTGFzdCBUcnVlDQoJUmVjdXJzaXZlIEZhbHNlDQoJUmVuYW1lQ2hlY2sgRmFsc2UNCglFeGVjICRGaWxlTmFtZSA9IGZpbGVfbmFtZSgpOyAjIFNlbmQgZmlsZSBuYW1lIHdpdGggZWFjaCBtZXNzYWdlDQoJRXhlYyAkc291cmNlX2lkID0gJ1dpbGRGbHkxMCc7DQoJSW5wdXRUeXBlIDU3NmQxZDNkNjU5ZmIxMDdmNzIyZGIzOC1tdWx0aWxpbmUNCjwvSW5wdXQ+DQoNCmBgYA0KDQpUaGUgZnVsbCB5YW1sIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250ZW50Og0KYGBgDQpzZXJ2ZXJfdXJsOiBodHRwOi8vZ3JheWxvZy5teWNvbXBhbnkubG9jYWw6MTI5MDANCnRsc19za2lwX3ZlcmlmeTogZmFsc2UNCm5vZGVfaWQ6IGdyYXlsb2ctY29sbGVjdG9yLXNpZGVjYXItZGV2c3J2DQpjb2xsZWN0b3JfaWQ6IGZpbGU6QzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxncmF5bG9nXGNvbGxlY3Rvci1zaWRlY2FyXGNvbGxlY3Rvci1pZA0KdGFnczoNCiAgICAtIHVuZGVmaW5lZA0KbG9nX3BhdGg6IEM6XFByb2dyYW0gRmlsZXMgKHg4NilcZ3JheWxvZ1xjb2xsZWN0b3Itc2lkZWNhcg0KdXBkYXRlX2ludGVydmFsOiAxMA0KYmFja2VuZHM6DQogICAgLSBuYW1lOiBueGxvZw0KICAgICAgZW5hYmxlZDogdHJ1ZQ0KICAgICAgYmluYXJ5X3BhdGg6IEM6XFByb2dyYW0gRmlsZXMgKHg4Nilcbnhsb2dcbnhsb2cuZXhlDQojICAgICAgY29uZmlndXJhdGlvbl9wYXRoOiBDOlxQcm9ncmFtIEZpbGVzICh4ODYpXGdyYXlsb2dcY29sbGVjdG9yLXNpZGVjYXJcZ2VuZXJhdGVkXG54bG9nLmNvbmYNCiAgICAgIGNvbmZpZ3VyYXRpb25fcGF0aDogQzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxncmF5bG9nXGNvbGxlY3Rvci1zaWRlY2FyXGNvbmZcbnhsb2cuY29uZg0KYGBgDQoNCkFzIGFuIGFsdGVybmF0ZSBhcHByb2FjaCAoSSBoYXZlbid0IHRlc3RlZCBidXQgaXQgc2hvdWxkIHdvcmspIGlzIHRvIGdvIGZvciB0aGUgZmlyc3Qgb3B0aW9uIChzZXJ2ZXIgc2lkZSBjb250cm9sbGVkIGNvbmZpZ3VyYXRpb24pIGJ1dCBpbnN0ZWFkIG9mIGRlZmluaW5nIE91dHB1dHMvSW5wdXRzIGp1c3QgcGxhY2UgYWxsIG54bG9nLmNvbmYgY29udGVudCBpbiB0aGUgZGVmYXVsdCBueGxvZyBzbmlwcGV0LCBpbiB0aGUgV2luZG93cyBzZWN0aW9uLiBCZSBzdXJlIHlvdSBoYXZlIGluIHN5bmMgdGhlIGNvbGxlY3RvciBzaWRlIGNsaWVudF9pZCB3aXRoIHRoZSBvbmUgaW4gdGhlIG54bG9nLmNvbmYgY29udGVudCwgT3V0cHV0IHNlY3Rpb24gKHNlZSBgRXhlYyAkZ2wyX3NvdXJjZV9jb2xsZWN0b3IgPSAnMDMyNGJkNzktYjlhOS00NThlLTk5NzctZDBlZWNiZDJkMzQ3JztgKToNCg0KYGBgDQo8T3V0cHV0IDU3NmNmNDI2NjU5ZmIxMDdmNzIyYjAxMT4NCglNb2R1bGUgb21fdGNwDQoJSG9zdCBncmF5bG9nLm15Y29tcGFueS5sb2NhbA0KCVBvcnQgMTIyMDENCglPdXRwdXRUeXBlICBHRUxGX1RDUA0KCUV4ZWMgJHNob3J0X21lc3NhZ2UgPSAkcmF3X2V2ZW50OyAjIEF2b2lkcyB0cnVuY2F0aW9uIG9mIHRoZSBzaG9ydF9tZXNzYWdlIGZpZWxkLg0KCUV4ZWMgJGdsMl9zb3VyY2VfY29sbGVjdG9yID0gJzAzMjRiZDc5LWI5YTktNDU4ZS05OTc3LWQwZWVjYmQyZDM0Nyc7DQoJRXhlYyAkSG9zdG5hbWUgPSBob3N0bmFtZV9mcWRuKCk7DQo8L091dHB1dD4NCmBgYA0KDQojIyMgRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24gb24gYW5vdGhlciBzZXJ2ZXINCg0KT25jZSB3ZSBoYXZlIGEgY29sbGVjdG9yIGNvbmZpZ3VyZWQgd2UgY2FuIGR1cGxpY2F0ZSBlYXNpbHkgdGhlIGluc3RhbGxhdGlvbiBvbiBhbm90aGVyIG9uZToNCg0KDQotIFBlcmZvcm0gdGhlIE5YTG9nIGluc3RhbGxhdGlvbiBzdGVwcw0KLSBJbnN0YWxsIHRoZSBjb2xsZWN0b3Itc2lkZWNhciAoanVzdCBydW4gdGhlIHNldHVwKQ0KLSBDb3B5IHlhbWwgYW5kIG54bG9nLmNvbmYgZmlsZXMgb24gdGhlIHRhcmdldCBzZXJ2ZXINCi0gQ2hhbmdlIHRoZSB5YW1sIHRvIHJlZmxlY3QgdGhlIHJpZ2h0IG5vZGVfaWQNCi0gQ2hhbmdlIHRoZSBjb250ZW50IG9mIHRoZSBjb2xsZWN0b3ItaWQgd2l0aCBzb21lIHVuaXF1ZSBzdHJpbmcgKGEgR1VJRD8pDQotIENoYW5nZSB0aGUgbnhsb2cuY29uZiBPdXRwdXQgdGFnIHRvIHJlZmxlY3QgdGhlIGNvbGxlY3Rvci1pZCB2YWx1ZSAg