<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dan&#039;s linux blog</title>
	<atom:link href="http://www.dark.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dark.ca</link>
	<description>direct from the mysterious land of the sysadmin</description>
	<lastBuildDate>Tue, 23 Apr 2013 14:20:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>DevOpsDays Paris 2013, the event that was</title>
		<link>http://www.dark.ca/2013/04/23/devopsdays-paris-2013-the-event-that-was/</link>
		<comments>http://www.dark.ca/2013/04/23/devopsdays-paris-2013-the-event-that-was/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 13:14:41 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=389</guid>
		<description><![CDATA[I recently helped organise the inaugural Paris edition of the popular DevOpsDays series of conferences.  It was a great event, and I&#8217;d like to share some of my thoughts and observations here. The DevOpsDays series of events is, as the name implies, centred around the &#8220;devops&#8221; movement, and is intended as a way to introduce [...]]]></description>
				<content:encoded><![CDATA[<p>I recently helped organise the inaugural <a href="http://devopsdays.org/events/2013-paris/http://" target="_blank">Paris edition</a> of the popular <a href="https://twitter.com/search?q=%23devopsdays" target="_blank">DevOpsDays</a> series of conferences.  It was a great event, and I&#8217;d like to share some of my thoughts and observations here.</p>
<p>The DevOpsDays series of events is, as the name implies, centred around the &#8220;devops&#8221; movement, and is intended as a way to introduce people to this style of IT workflow, project, and people management.  Since this is not related to a programming language, this conference falls outside of the normal sorts of events that Mozilla generally finds itself involved in.  I believe this to be a very good thing, and I am proud to have represented <a href="https://www.mozilla.org/" target="_blank">Mozilla</a> both as a sponsor of the event, and as a European devops community member.</p>
<p>The audience was mostly French in composition with a not-insignificant number of attendees from both Francophone and non-Francophone European countries.  Said audience was a healthy mix of developers, IT operations, and managers across a wide spectrum of company sizes, types, and even industries; frankly, I was impressed at how broad the composition was, and it was refreshing to see interest in the devops movement from such a wide group.</p>
<p>Though the event was held in Paris, all of the talks (with the exception of some of the ignites) were done in English.  This was by design &#8211; a internally contentious decision that, in my opinion, ultimately proved itself to be the correct one.  The open spaces during the afternoon were in a mix of English and French in order to ensure that everybody could participate equally.  Concerning the open spaces, we weren&#8217;t sure if the format would work here in France, but they were a smash success!  Everybody seemed to really enjoy the format as a platform for discussion, debate, and idea-generation.  I&#8217;d wager that for many of the attendees, it was the first time they&#8217;d ever been exposed to such a thing, and my hope is that they can bring the format to others in the future.</p>
<p>Since devops is so new to France, the majority of the presentations themselves were entry-level, and thus not particularly interesting to me directly.  That said, there were two presentations that really stood out (and would have held their own even at a more &#8220;advanced&#8221; event): &#8220;<a href="https://speakerdeck.com/alq/customerops" target="_blank">CustomerOps</a>&#8221; by <a href="https://twitter.com/alq" target="_blank">Alexis Lê-Quôc</a>, and &#8220;<a href="https://speakerdeck.com/pyr/map-and-territory-a-story-of-visibility" target="_blank">Map &amp; Territory</a>&#8221; by <a href="https://twitter.com/pyr" target="_blank">Pierre-Yves Ritschard</a>.</p>
<p>Alexis&#8217; presentation on &#8220;CustomerOps&#8221; centred around the concept of providing customer support using engineering principles &#8211; and, indeed, delivered by engineers themselves.  This really hit home for me because in Mozilla IT/Ops, we&#8217;re not only the people who build and provide technical infrastructure, but are also the people who provide direct support to the consumers of that infrastructure &#8211; a situation that is absolutely not a given in many other companies (i.e. the admins and the customer reps are not the same people).  Alexis illustrated the importance of communication, and how to measure success (read: customer satisfaction) in meaningful ways.</p>
<p>Pierre-Yves&#8217; presentation was based on a very interesting philosophical conjecture: that our mental <em>model</em> of the world is not the same as the <em>reality</em> said model attempts to describe.  Put another way, a map isn&#8217;t actually land, it&#8217;s a representation of the territory it describes (hence the title).  Therefore, the most valuable models are the ones that can describe reality in useful ways, and it&#8217;s in defining &#8220;usefulness&#8221; that the real effort must be made.  In a more applicable sense his thesis was simple: identify your &#8220;key metrics&#8221; &#8211; the numbers which literally describe the success or failure of your business &#8211; and make sure you are collecting, analysing, and modelling them above all.  Every other metric is either secondary or potentially uninteresting in the first place.</p>
<p>Personally, I spent a lot of time mingling with the attendees, talking about Mozilla, our projects, and our mission.  Generally speaking, the first question was, &#8220;Can I have one of those Firefox stickers?&#8221;, but the second question was, &#8220;When can I get my hands on a <a href="http://www.geeksphone.com/" target="_blank">FirefoxOS phone</a>?&#8221;  As usual, everybody wanted to see one, and (unfortunately), as usual, I didn&#8217;t have one to show them.  The more events that I attend on behalf of Mozilla, the more I realise that continues to be a wasted opportunity to promote our most exciting new project.  I&#8217;ll have to work on this going forward.</p>
<p>Of course, since this was a devops-related event, people were also very curious about if and how Mozilla is implementing devops internally.  The overarching theme of devops is communication, so this event was an excellent opportunity to talk about <a href="https://blog.mozilla.org/it/" target="_blank">IT at Mozilla</a>, and to promote not only our successes, but dig into our failures as well.  This sort of interaction is vital in order to avoid stagnation.</p>
<p>In summary, it was a fine showing for our first Parisian event, and I am looking forward to the next edition.  Hopefully I&#8217;ll see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2013/04/23/devopsdays-paris-2013-the-event-that-was/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>hangops, european edition</title>
		<link>http://www.dark.ca/2013/04/05/hangops-eu/</link>
		<comments>http://www.dark.ca/2013/04/05/hangops-eu/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 12:08:58 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=385</guid>
		<description><![CDATA[Today roidrage and I hosted the inaugural European edition of the popular Hangops podcast / hangout sessions.  Hangops.eu (as we&#8217;ve taking to calling it) is functionally the same its North American counterpart &#8211; with the exception that &#8220;our&#8221; 11:00 is that of Western Europe, not California. ;) If you&#8217;re not familiar with the Hangops, now&#8217;s [...]]]></description>
				<content:encoded><![CDATA[<p>Today <a href="https://twitter.com/roidrage" target="_blank">roidrage</a> and <a title="How to use Puppet like an Adult" href="https://twitter.com/phrawzty" target="_blank">I</a> hosted the <a href="https://www.youtube.com/watch?v=QmMmjDnrfk8" target="_blank">inaugural European edition</a> of the popular <a href="https://twitter.com/hangops" target="_blank">Hangops</a> podcast / hangout sessions.  Hangops.eu (as we&#8217;ve taking to calling it) is functionally the same its North American counterpart &#8211; with the exception that &#8220;our&#8221; 11:00 is that of Western Europe, not California. ;)</p>
<p>If you&#8217;re not familiar with the Hangops, now&#8217;s the time for you to get with the programme.  The format is simple : get a group of talkative Ops people together on Google Hangouts, and see what happens !  Sometimes there are moderated talks, other times there are special guests, but the basic idea never changes &#8211; it&#8217;s fundamentally a chance for nerds to present ideas, debate topics, learn a little something, and have a good time.</p>
<p>The sessions are simulcast to Youtube, so if you don&#8217;t want to join the hangout itself, you&#8217;re invited to listen and participate in the IRC channel (freenode/#hangops) at your leisure.</p>
<p>Hope to see you out next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2013/04/05/hangops-eu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HAProxy Puppet module (phrawzty remix)</title>
		<link>http://www.dark.ca/2013/03/18/haproxy-puppet-module-phrawzty-remix/</link>
		<comments>http://www.dark.ca/2013/03/18/haproxy-puppet-module-phrawzty-remix/#comments</comments>
		<pubDate>Mon, 18 Mar 2013 12:00:09 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[common tools]]></category>
		<category><![CDATA[logstash]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=376</guid>
		<description><![CDATA[As part of a big Logstash project at Mozilla (more on that to come), I was looking for an HAProxy module for Puppet, stumbling across the official Puppetlabs module in the process.  I&#8217;m told that this module works fairly well, with the caveat that it sometimes outputs poorly-formatted configuration files (due to a manifestly buggy [...]]]></description>
				<content:encoded><![CDATA[<p>As part of a big <a href="http://www.logstash.net/" target="_blank">Logstash</a> project at Mozilla (more on that to come), I was looking for an <a href="http://haproxy.1wt.eu/" target="_blank">HAProxy</a> module for Puppet, stumbling across the official <a href="https://forge.puppetlabs.com/puppetlabs/haproxy" target="_blank">Puppetlabs module</a> in the process.  I&#8217;m told that this module works fairly well, with the caveat that it sometimes outputs poorly-formatted configuration files (due to a manifestly buggy implementation of <a href="https://github.com/ripienaar/puppet-concat" target="_blank">concat</a>).  Furthermore, the module more or less requires <a href="https://www.google.fr/search?q=puppet+storeconfigs" target="_blank">storeconfigs</a>, which we do not use in our primary Puppet system.</p>
<p>Long story short, while I never ended up using HAProxy as part of the project, I did <em>remix</em> the official module to solve both of the aforementioned issues.  From the README :</p>
<p style="padding-left: 30px;">This module is based on Puppetlabs&#8217; official HAProxy module; however, it has been &#8220;remixed&#8221; for use at Mozilla. There are two major areas where the original module has been changed :</p>
<ul>
<li>Storeconfigs, while present, are no longer required.</li>
<li>The &#8220;listen&#8221; stanza format has been abandoned in favour of a frontend / backend style configuration.</li>
</ul>
<p style="padding-left: 30px;">A very simple configuration to proxy unrelated Redis nodes :</p>
<div style="padding-left: 30px;">
<pre style="padding-left: 30px;">  class { 'haproxy': }

  haproxy::frontend { 'in_redis':
    ipaddress       =&gt; $::ipaddress,
    ports           =&gt; '6379',
    default_backend =&gt; 'out_redis',
    options         =&gt; { 'balance' =&gt; 'roundrobin' }
  }

  haproxy::backend { 'out_redis':
    listening_service =&gt; 'redis',
    server_names      =&gt; ['node01', 'node02'],
    ipaddresses       =&gt; ['node01.redis.server.foo', 'node02.redis.server.foo'],
    ports             =&gt; '6379',
    options           =&gt; 'check'
  }</pre>
</div>
<p>If that sounds interesting to you, the module is available on my <a href="https://github.com/phrawzty/puppetlabs-haproxy" target="_blank">puppetlabs-haproxy repo</a> on Github. Pull requests welcome !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2013/03/18/haproxy-puppet-module-phrawzty-remix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LCA, the event that was</title>
		<link>http://www.dark.ca/2013/03/11/lca-the-event-that-was/</link>
		<comments>http://www.dark.ca/2013/03/11/lca-the-event-that-was/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 11:49:55 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[LCA]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=370</guid>
		<description><![CDATA[Linux Conf Australia 2013, (alias linux.conf.au, alias LCA) was an amazing experience, and it&#8217;s difficult to summarise it succinctly, but there are definitely some highlights and important take-aways that I&#8217;d like to make special note of. My fundamental reason for attending was that Ben Kero and I were invited to do a talk regarding Puppet [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://lca2013.linux.org.au/" target="_blank">Linux Conf Australia 2013</a>, (alias linux.conf.au, alias LCA) was an amazing experience, and it&#8217;s difficult to summarise it succinctly, but there are definitely some highlights and important take-aways that I&#8217;d like to make special note of.</p>
<p>My fundamental reason for attending was that <a href="https://twitter.com/bkero" target="_blank">Ben Kero</a> and I were invited to do a <a title="How to use Puppet like an Adult" href="http://www.dark.ca/2013/02/15/how-to-use-puppet-like-an-adult/" target="_blank">talk regarding Puppet</a> (an important infrastructural tool that we use at Mozilla).  The talk, like all of the presentations given by Mozillians at LCA this year (and there were more than a few), was very well-received, and delivered to a packed auditorium &#8211; in fact, people had to be turned away at the door beforehand !</p>
<p>Since our talk bumped up against the lunch period, we had occasion to stay in the space and launch an informal panel discussion that included other Mozillians as well as representatives from a number of other Open Source companies and organisation.  We engaged on a variety of topics, ranging from IT-centric to questions about the future of the web, and the importance of open standards and market competition.  It was only when the organisers forced us out that the auditorium was finally cleared.</p>
<p>Interestingly, from the moment I arrived in Australia, and through until the very last day, I found myself acting as an ambassador for Mozilla.</p>
<p>For example, a day before the conference even started, I was part of an informal debate concerning the future of mobile and the importance of FirefoxOS within it.  Other participants included a Ubuntu employee and a number of hardware hackers who &#8211; as it turned out &#8211; were already trying to port FirefoxOS to other types of phones.</p>
<p>Another example even occurred at a local cricket match.  I was wearing my Firefox T-shirt (which usually generates interest), and ended up doing a some impromptu demos of Firefox for Android to a couple of different groups &#8211; the highly satisfying result was that a handful of people downloaded and installed it on the spot !</p>
<p>These, and more, are all opportunities to engage people about Mozilla, and in many cases, to introduce our values and mission to entirely new audiences.  During this and other conferences, I&#8217;ve found that even long-time users of Firefox and Thunderbird (for example) are often not even aware of who and what Mozilla is, and what we&#8217;re about.  I try my best to be a good ambassador, and I&#8217;m proud to represent the organisation wherever, and whenever I can.</p>
<p>From a personal perspective, the conference had two major benefits: it was an excellent learning experience, and a fantastic opportunity to spend time in-person with a number of my co-workers in the IT/Ops team.</p>
<p>Of note, I had the pleasure of attending a number of talks and presentations about technology that we use in our environment that have had a direct impact in my work-flow already.  Beyond the directly-applicable benefits, I was particularly inspired by a presentation about <a href="http://mirror.linux.org.au/pub/linux.conf.au/2013/ogv/Keynote_Andrew_Bunnie_Huang.ogv" target="_blank">programming for embedded devices</a> (shout-out to <a href="http://lca2013.linux.org.au/media/news/76" target="_blank">Bunnie Huang</a>) which, due to peculiar technical constraints, requires a very precise and measured approach to development.  These ideals could &#8211; and should &#8211; be carried through outside of the embedded world.</p>
<p>In summary, LCA 2013 was an excellent opportunity to learn, teach, and engage the public concerning technology in specific, Mozilla in particular, and open source in general.  I&#8217;m already looking forward to next year !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2013/03/11/lca-the-event-that-was/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://mirror.linux.org.au/pub/linux.conf.au/2013/ogv/Keynote_Andrew_Bunnie_Huang.ogv" length="122068505" type="video/ogg" />
		</item>
		<item>
		<title>How to use Puppet like an Adult</title>
		<link>http://www.dark.ca/2013/02/15/how-to-use-puppet-like-an-adult/</link>
		<comments>http://www.dark.ca/2013/02/15/how-to-use-puppet-like-an-adult/#comments</comments>
		<pubDate>Fri, 15 Feb 2013 11:06:51 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[common tools]]></category>
		<category><![CDATA[LCA]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=366</guid>
		<description><![CDATA[Hello friends, Recently, Ben Kero (a fellow Mozillian) and I were invited to present a talk at Linux Conf Australia.  To say that we were excited about presenting at one of the best Libre / Open Source conferences in the world is an understatement.  We knew that we&#8217;d have to bring our A-game, and in [...]]]></description>
				<content:encoded><![CDATA[<p>Hello friends,</p>
<p>Recently, <a href="https://twitter.com/bkero">Ben Kero</a> (a fellow Mozillian) and I were invited to present a talk at <a href="http://linux.conf.au/">Linux Conf Australia</a>.  To say that we were excited about presenting at one of the best Libre / Open Source conferences in the world is an understatement.  We knew that we&#8217;d have to bring our A-game, and in all modesty, I like to think that we did.  If you were there in person, I&#8217;d like to personally thank you for coming out, and if you couldn&#8217;t make it, that&#8217;s ok &#8211; the organisers have made many videos from the 2013 LCA <a href="http://mirror.linux.org.au/linux.conf.au/2013/ogv/">available online</a>, including ours, entitled &#8220;<a href="http://mirror.linux.org.au/linux.conf.au/2013/ogv/How_to_use_Puppet_like_an_Adult.ogv">How to use Puppet like an Adult</a>&#8220;.</p>
<p>We cover a variety of topics, including parametrisation, how to select good pre-built modules, and how you can build eco-systems around Puppet itself.  Please feel free to drop us a line, either on <a href="https://twitter.com/phrawzty">Twitter</a> or here on the blog.  Thanks !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2013/02/15/how-to-use-puppet-like-an-adult/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://mirror.linux.org.au/linux.conf.au/2013/ogv/How_to_use_Puppet_like_an_Adult.ogv" length="131320289" type="video/ogg" />
		</item>
		<item>
		<title>Puppet at Mozilla, the podcast</title>
		<link>http://www.dark.ca/2012/09/20/puppet-at-mozilla-the-podcast/</link>
		<comments>http://www.dark.ca/2012/09/20/puppet-at-mozilla-the-podcast/#comments</comments>
		<pubDate>Thu, 20 Sep 2012 19:45:51 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=349</guid>
		<description><![CDATA[Hello everybody ! If you&#8217;re interested in learning a little about Puppet at Mozilla, I highly recommend that you check out Puppet Podcast #7, where Brandan Burton (@solarce) and I (@phrawzty) talk with Puppet Labs&#8217; Mike Stahnke (@stahnma) about just that topic.  It was our first podcast together, and frankly, it was more difficult that [...]]]></description>
				<content:encoded><![CDATA[<p>Hello everybody !</p>
<p>If you&#8217;re interested in learning a little about Puppet at Mozilla, I highly recommend that you check out <a href="http://puppetlabs.com/puppet-labs-podcast/7/" target="_blank">Puppet Podcast #7</a>, where Brandan Burton (<a href="https://twitter.com/solarce" target="_blank">@solarce</a>) and I (<a href="https://twitter.com/phrawzty" target="_blank">@phrawzty</a>) talk with Puppet Labs&#8217; Mike Stahnke (<a href="https://twitter.com/stahnma" target="_blank">@stahnma</a>) about just that topic.  It was our first podcast together, and frankly, it was more difficult that I thought it&#8217;d be.  That said, it was a great experience, and I hope to do it again sometime.  Hope you enjoy it !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2012/09/20/puppet-at-mozilla-the-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>quickly generate an encrypted password</title>
		<link>http://www.dark.ca/2012/02/12/quickly-generate-an-encrypted-password/</link>
		<comments>http://www.dark.ca/2012/02/12/quickly-generate-an-encrypted-password/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 12:05:56 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[common tools]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=335</guid>
		<description><![CDATA[Hi everybody !  Here&#8217;s a quick method for generating encrypted passwords that are suitable for things like /etc/passwd .  I realise that this isn&#8217;t terribly complex, but honestly, I always forget how to do this until I actually need to do it &#8211; so here&#8217;s a reminder for all of us. :) #!/bin/bash if [ [...]]]></description>
				<content:encoded><![CDATA[<p>Hi everybody !  Here&#8217;s a quick method for generating encrypted passwords that are suitable for things like <code>/etc/passwd</code> .  I realise that this isn&#8217;t terribly complex, but honestly, I always forget how to do this until I actually need to do it &#8211; so here&#8217;s a reminder for all of us. :)</p>
<p><code>#!/bin/bash</p>
<p>if [ "x$1" == 'x' ]; then<br />
    echo "USAGE: $0 'password'"<br />
    exit 1<br />
fi</p>
<p># Get an md5sum of the password string; this is used for the SHA seed.<br />
md5=$( echo $1 | md5sum )<br />
extract="${md5:2:8}"</p>
<p># Calculate the SHA hash of the password string using the extracted seed.<br />
mkpasswd -m SHA-512 "$1" "$extract"<br />
exit $?</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2012/02/12/quickly-generate-an-encrypted-password/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Elasticsearch backup strategies</title>
		<link>http://www.dark.ca/2011/11/22/elasticsearch-backup-strategies/</link>
		<comments>http://www.dark.ca/2011/11/22/elasticsearch-backup-strategies/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 09:00:41 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[elasticsearch]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=299</guid>
		<description><![CDATA[Hello again! Today we&#8217;re going to talk about backup strategies for Elasticsearch. One popular way to make backups of ES requires the use of separate ES node, while another relies entirely on the underlying file system of a given set of ES nodes. The ES-based approach: Bring up an independent (receiving) ES node on a [...]]]></description>
				<content:encoded><![CDATA[<p>Hello again! Today we&#8217;re going to talk about backup strategies for <a href="http://elasticsearch.org" target="_blank">Elasticsearch</a>. One popular way to make backups of ES requires the use of separate ES node, while another relies entirely on the underlying file system of a given set of ES nodes.</p>
<p>The ES-based approach:</p>
<ul>
<li>Bring up an independent (receiving) ES node on a machine that has network access to the actual ES cluster.</li>
<li>Trigger a script to perform a full index import <em>from</em> the ES cluster <em>to</em> the receiving node.
<li>Since the receiving node is unique, every shard will be represented on said node.</li>
<li>Shutdown the receiving node.</li>
<li>Preserve the <code>/data/</code> directory from the receiving node.</li>
</ul>
<p>The file system-based approach:</p>
<ul>
<li>Identify a <em>quorum </em>of nodes in the ES cluster.</li>
<li>Quorum is necessary in order to ensure that all of the shards are represented.</li>
<li>Trigger a script that will preserve the <code>/data/</code> directory of each selected node.</li>
</ul>
<p>At first glance the file system-based approach appears simpler &#8211; and it is &#8211; but it comes with some drawbacks, notably the fact that coherency is <em>impossible to guarantee</em> due to the amount of time required to preserve <code>/data/</code> on each node. In other words, if data changes on node between the start and end times of the preservation mechanism, those changes may or may not be backed up. Furthermore, from an operational perspective, restoring nodes from individual shards may be problematic.</p>
<p>The ES-based approach does not have the coherency problem; however, beyond the fact that it is more complex to implement and maintain, it is also more costly in terms of service delivery. The actual import process itself requires a large number of requests to be made to the cluster, and the resulting resource consumption on both the cluster nodes as well as the receiving node are non-trivial. On the other hand, having a single, coherent representation of every shard in one place may pay dividends during a restoration scenario.</p>
<p>As is often the case, there is no one solution that is going to work for everybody all of the time &#8211; different environments have different needs, which call for different answers.  That said, if your <em>primary</em> goal is a consistent, coherent, and complete backup that can be easily restored when necessary (and overhead be damned!), then the ES-based approach is clearly the superior of the two.</p>
<h3>import it !</h3>
<p>Regarding the ES-based approach, it may be helpful to take a look at a simple import script as an example.  How about a quick and dirty Perl script (based on something from <a href="https://github.com/noplay" target="_blank">Noplay</a>) ?</p>
<pre>use ElasticSearch;

my $local = ElasticSearch-&gt;new(
    servers =&gt; 'localhost:9200'
);
my $remote = ElasticSearch-&gt;new(
    servers    =&gt; 'cluster_member:9200',
    no_refresh =&gt; 1
);

my $source = $remote-&gt;scrolled_search(
    index =&gt; 'content',
    search_type =&gt; 'scan',
    scroll      =&gt; '5m'
);
$local-&gt;reindex(source=&gt;$source);</pre>
<p>You&#8217;ll want to replace the relevant elements with something sane for your environment, of course.</p>
<p>As for preserving the resulting /data/ directory (in either method), I will leave that as an exercise to the reader, since there are simply too many equally relevant ways to go about it.  It&#8217;s worth noting that the import method doesn&#8217;t need to be complex <em>at all</em> &#8211; in fact, it really shouldn&#8217;t be, since complex backup schemes tend to have too many chances for failure than is necessary.</p>
<p>Happy indexing!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2011/11/22/elasticsearch-backup-strategies/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Send your logs to the cloud; Loggly vs. Papertrail</title>
		<link>http://www.dark.ca/2011/11/17/send-your-logs-to-the-cloud-loggly-vs-papertrail/</link>
		<comments>http://www.dark.ca/2011/11/17/send-your-logs-to-the-cloud-loggly-vs-papertrail/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 16:31:45 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=321</guid>
		<description><![CDATA[Centralised cloud-based logging.  It sounds tasty &#8211; and it is &#8211; but who should you go with?  Well, Loggly and Papertrail are the only games in town when it comes to the aforementioned service; the only other competitor in this space is Splunk Storm, but their offering &#8211; well-pedigreed though it may be &#8211; is [...]]]></description>
				<content:encoded><![CDATA[<p>Centralised cloud-based logging.  It sounds tasty &#8211; and it is &#8211; but who should you go with?  Well, <a href="http://loggly.com/" target="_blank">Loggly</a> and <a href="https://papertrailapp.com/" target="_blank">Papertrail</a> are the only games in town when it comes to the aforementioned service; the only other competitor in this space is <a href="https://www.splunkstorm.com/" target="_blank">Splunk Storm</a>, but their offering &#8211; well-pedigreed though it may be &#8211; is strictly in private beta at this time, and therefore cannot really be considered a valid option.</p>
<p>The fact of the matter is that Loggly and Papertrail are, at a high level, functionally identical. They offer more or less the same bouquet of functionality, including alert triggers, aggregate visualisation, and even map reduce tools for data mining and reporting. Loggly has been around longer, and has a better track record for open-source involvement, meaning that the eco-system around their service is more mature; however, that doesn&#8217;t mean that they are necessarily superior to Papertrail in terms of the actual service.</p>
<p>My suggestion: If you&#8217;re in a hurry, flip a coin and go with one or the other. If you have the time, you should go ahead and try both out for a bit; Papertrail has a 7-day free trial programme, and Loggly is free (in perpetuity) for sufficiently small amounts of data and retention (which is no problem if you&#8217;re just poking around).</p>
<p>I&#8217;m <em>very</em> interested in hearing about actual user experiences with either or both, so please don&#8217;t hesitate to add a comment or drop me a line directly via the contact form.</p>
<p><strong>Edit</strong>: From <a href="http://spootnik.org/" target="_blank">@pyr</a> : « you  can also consider <a href="http://www.datadoghq.com" target="_blank">@datadoghq</a> which has a different take on the issue but might fit the bill. »</p>
<p><strong>Edit 2</strong>: From the comments, there&#8217;s also <a href="https://logentries.com/">Logentries</a>, which I don&#8217;t personally have any experience with, but which appears to offer a reasonably comprehensive offering as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2011/11/17/send-your-logs-to-the-cloud-loggly-vs-papertrail/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Heavyweight tilt : GitHub vs. Bitbucket</title>
		<link>http://www.dark.ca/2011/11/08/heavyweight-tilt-github-vs-bitbucket/</link>
		<comments>http://www.dark.ca/2011/11/08/heavyweight-tilt-github-vs-bitbucket/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 09:42:38 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://www.dark.ca/?p=284</guid>
		<description><![CDATA[When it comes to code hosting on The Internets today, GitHub is absolutely the hottest, trendiest service going &#8211; but it&#8217;s not alone. Right now, the primary direct competitor to GitHub is Bitbucket, and choosing the best service for you or your company can be a less than obvious scenario &#8211; so let&#8217;s break it [...]]]></description>
				<content:encoded><![CDATA[<p>When it comes to code hosting on The Internets today, <a href="https://github.com/" target="_blank">GitHub</a> is absolutely the hottest, trendiest service going &#8211; but it&#8217;s not alone. Right now, the primary direct competitor to GitHub is <a href="https://bitbucket.org/">Bitbucket</a>, and choosing the best service for you or your company can be a less than obvious scenario &#8211; so let&#8217;s break it down, shall we?</p>
<p>GitHub is generally considered to be the most popular code hosting and collaboration site out there today. They have an excellent track record for innovation and evolution of their service, and they put their money where their mouth is, notably by promoting and releasing their own internal tools into the open source community.  Their site offers a buffet of ever-improving facilities for collaborative activity, notably including an integrated issue tracker and excellent code comparison tools, among others. To be fair, not every feature has had the same level of care and attention paid to it, and as a result, some elements feel quite a bit more mature than others; however, again, they never stop trying to make things better.</p>
<p>Bitbucket looks <em>a lot</em> like GitHub.  That&#8217;s a fact.  I don&#8217;t honestly know which one came first, but it&#8217;s clear that today they&#8217;re bouncing off of each other in terms of design, features, and functionality.  You can more or less transpose your user experience between the two sites without missing too much of a beat, so for a casual user looking to contribute here and there, you get two learning curves for the price of one (nice).  Bitbucket&#8217;s pace of evolution is (perhaps) less blistering, but they too are capable of rolling out new and improved toys over time.</p>
<h3>let&#8217;s get down to brass tacks</h3>
<p>Both services offer the same basic functionality, which is the ability to create an account, and associate that account with any number of <em>publicly-accessible</em> repositories; however, if you want a <em>private</em> repository, GitHub will make you pay for it, whereas BitBucket offers it gratis.  There, as it is said, lies the rub.  More on this later.</p>
<p>One of the big differences between the two services lie in their respective origins: GitHub remains an independent start-up, whereas Bitbucket (although once independent) was acquired by &#8211; and is now strongly associated with &#8211; Atlassian (of JIRA fame). It is my opinion that this affects the cultural make-up of Bitbucket in subtle ways, leading to a more corporate take on development, deployment, and importantly, community relations and involvement.  Take a look at their respective blogs (go ahead, I&#8217;ll wait).</p>
<p>A quick scan of the past few months from each blog will reveal some important differences:</p>
<ul>
<li>GitHub&#8217;s release schedule is more aggressive, with improvements and new features coming more regularly, whereas Bitbucket places greater emphasis on their tight integration with JIRA, Jenkins, and other industry tools.</li>
<li>Bitbucket advertises paid services and software on their blog, whereas GitHub advertises open source projects.</li>
<li>Bitbucket&#8217;s blog has one recent author, whereas GitHub&#8217;s blog has many recent authors.</li>
<li>GitHub hosts more community events (notably drinkups, heh) over a greater geographic area than Bitbucket (and their posts have more community response overall).</li>
</ul>
<p>Also, check out GitHub&#8217;s &#8220;<a href="https://github.com/about" target="_blank">about us</a>&#8221; page &#8211; <a href="http://www.quora.com/Brogramming/How-does-a-programmer-become-a-brogrammer" target="_blank">brogrammers</a> abound!  I&#8217;d compare the group to Bitbucket, but as it so happens, they don&#8217;t have an analogous page.</p>
<p>Previously I mentioned that GitHub would like you to pay for private repositories.  This is obviously part of their revenue scheme (and who can blame them for wanting to get that cheese?), but it also has the side-effect of making people <em>choose</em> to willingly host their projects publicly.  This has ended up creating a (very) large community of active participants representing a variety of languages and interests, which in turn results in more projects, and so on and so forth.  This feedback loop is interesting since it auto-builds popularity: as more people use it, the more people will use it.<em></em></p>
<p>These observations are, in no way, objective statements of the superiority of one platform over the other &#8211; they <em>are</em>, however, indicative of cultural differences between the two companies.  This is (or, at least, should be) a non-trivial element when deciding which service is right for you or your organisation.  For example, I&#8217;m a beer-drinking open source veteran that works in start-ups and small companies, so culturally my preferences are different than those of a suit-wearing system architect, working for a thousand-person consulting firm.  One isn&#8217;t necessarily better than the other &#8211; they&#8217;re just not the same (and that&#8217;s OK).</p>
<h3>but wait, there&#8217;s more</h3>
<p>Alright, here comes the shocker: for paid services (i.e. private repositories), GitHub is <em>much more expensive</em> than Bitbucket.  As in nowhere near the same price.  At all.  How can this be?  Well, I&#8217;m not privy to the financials of either company (if I were, I doubt I&#8217;d have written this post), but hey, the money for all those great open source projects, drinkups, and (bluntly) <em>salaries</em> have to come from somewhere &#8211; and while Bitbucket has Atlassian&#8217;s pockets backing them, GitHub has to stand on their own successes, and live with their own failures.</p>
<p>The two services are not dissimilar technically speaking, so it&#8217;s really up to you to decide which culture is better suited for your project.  Do you just need a spot to put your private project, that you program alone, isolated from the greater Internet?  BitBucket.  Do you have a public project that you&#8217;d like other people to discover, hack on together, and build a community around?  GitHub.  As for paid services, well I suppose that comes down to whether you want to pay extra to support what GitHub is doing or not.</p>
<p>Now, let&#8217;s be fair, for a lot of companies, &#8220;culture&#8221; is an irrelevant factor in their purchasing department &#8211; cost is the only concern.  Fair enough.  But let&#8217;s say you&#8217;ve got a team of developers, all of whom already have their own projects on GitHub, are familiar with the tools and processes, and have a network of fellow hackers built-in and ready to go.  In that case, perhaps culture is worth something after all.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dark.ca/2011/11/08/heavyweight-tilt-github-vs-bitbucket/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
