** Description changed:

+ === Begin SRU Template ===
+ [Impact] 
+ Cloud-init's logging is inconsistent due to availability of syslog during
+ boot.
+ 
+ Cloud-init logs to /var/log/cloud-init.log by default.  It does this in
+ a way that was originally designed to prefer to use syslog if it was
+ available, and then fall back to writing directly to that file.
+ 
+ Over time this has been shown to be problematic.
+ a.) it relied on syslog during boot, and on some distros it wasn't
+     present.
+ b.) sometimes it would not be available during cloud-init-local.service
+     and then would be during cloud-init.service.  The result was that
+     the log would have two different time stamp formats (one written
+     by rsyslog and one by python logging).
+ c.) if rsyslog was used, micro seconds were not included in the log.
+ d.) since the move to systemd, there has even been times when cloud-init's
+     attempt to determine if syslog was available would false-positive.
+     that would result logging not being written to the file at all.
+ 
+ Over all, the complexity was just not found to worth the benefit.
+ 
+ [Test Case]
+   * Launch an instance.
+   * Look at /var/log/cloud-init.log.
+     on start, the cloud-int process logs a message like
+       'Cloud-init v 0.7.8 running'
+     Look at those messages specifically.  In the example here (lxd), neither
+     cloud-init.service or cloud-init-local.service successfully logged at all.
+ 
+     # grep Cloud-init /var/log/cloud-init.log 
+     Dec  2 18:06:56 y2 [CLOUDINIT] util.py[DEBUG]: Cloud-init v. 0.7.8 
running 'modules:config' at Fri, 02 Dec 2016 18:06:56 +0000. Up 5.0 seconds.
+     Dec  2 18:06:58 y2 [CLOUDINIT] util.py[DEBUG]: Cloud-init v. 0.7.8 
running 'modules:final' at Fri, 02 Dec 2016 18:06:58 +0000. Up 7.0 seconds.
+     Dec  2 18:06:58 y2 [CLOUDINIT] util.py[DEBUG]: Cloud-init v. 0.7.8 
finished at Fri, 02 Dec 2016 18:06:58 +0000. Datasource DataSourceNoCloud 
[seed=/var/lib/cloud/seed/nocloud-net][dsmode=net].  Up 7.0 seconds
+ 
+   * update to proposed, cleanup reboot
+     # enable propose and update
+     # cleanup
+ 
+     sudo rm -Rf /var/log/cloud-init* /var/lib/cloud/
+     sudo reboot
+     
+   * login again and look.
+ 
+     This time, all messages will have the format:
+        2016-12-02 17:58:43,175 - util.py[DEBUG]: Cloud-init v. 0.7.8 running 
'init-local' at Fri, 02 Dec 2016 17:58:43 +0000. Up 13.73 seconds.
+ 
+     And you will have one for each 'init-local', 'init', 'modules:config' and
+     modules:final.
+ 
+ [Regression Potential] 
+ Users relying on cloud-init writing entries to syslog will lose that.
+ 
+ [Other Info]
+ 
+ === End SRU Template ===
+ 
+ 
  output of cloud-init-local.service can get lost in systemd.
  The result is that there is no output in /var/log/cloud-init.log from 
cloud-init-local.service.
  
  There is some information in 
https://code.launchpad.net/~harlowja/cloud-init/+git/cloud-init/+merge/301729
  about how this occurrs and how it used to work.
  copying part of that here:
- 
  
  Cloud-init's logging basically employed a "try syslog and fallback to direct 
log to file".
  The proposed "just log to a file" is definitely dramatically simpler and 
advantageous in some cases.
  
  The way the "try syslog and fallback" works (or worked) on Ubuntu up
  until systemd was:
  
  a.) cloud-init init --local
-     1. read logging config,
-     2. attempt to log to syslog ([ *log_base, *log_syslog ])
-     3. that fail, so it log to file directly
+     1. read logging config,
+     2. attempt to log to syslog ([ *log_base, *log_syslog ])
+     3. that fail, so it log to file directly
  
  b.) cloud-init init
-    1.) rsyslog would have /dev/log up functional at this point
-    2.) cloud-init logging config read and ends up logging to syslog
+    1.) rsyslog would have /dev/log up functional at this point
+    2.) cloud-init logging config read and ends up logging to syslog
  
  Systemd changed some things in teh way /dev/log was handled, and the
  above no longer worked well.
  
  Additionally, cloud-init installs a file
  /etc/rsyslog.d/21-cloudinit.conf which tells rsyslog to redirect
  messages generated by cloud-init to /var/log/cloud-init.log
  
  The value of doing this in this way was that we use syslog, so if the
  user had configured the system to log remotely, cloud-init's logs would
  go to that remote system as they desired.
  
  If we directly log to a file, then cloud-init's log messages will not
  without further configuration go to syslog.
  
  One other thing to be aware of is that cloud-init can itself configure
  rsyslog through cloudinit/config/cc_rsyslog.py . So, the user could
  provide in user-data some rsyslog configuration, and then the system's
  syslog (including cloud-init messages) would start goign to that remote
  server as soon as they realistically could.

** Changed in: cloud-init (Ubuntu Xenial)
       Status: Confirmed => In Progress

** Changed in: cloud-init (Ubuntu Xenial)
       Status: In Progress => Triaged

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1643990

Title:
  cloud-init-local.service messages not written to /var/log/cloud-
  init.log in systemd

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-init/+bug/1643990/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to