<?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>Features Archives | Clever Cloud</title>
	<atom:link href="https://stagingv6.cleverapps.io/blog/tag/features-fr/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>From Code to Product</description>
	<lastBuildDate>Tue, 11 Jun 2024 12:26:22 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Features Archives | Clever Cloud</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Materia KV: our easy-to-use serverless key-value database is available to all</title>
		<link>https://stagingv6.cleverapps.io/blog/features/2024/06/11/materia-kv-our-easy-to-use-serverless-key-value-database-is-available-to-all/</link>
		
		<dc:creator><![CDATA[David Legrand]]></dc:creator>
		<pubDate>Tue, 11 Jun 2024 11:37:46 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[release]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=12497</guid>

					<description><![CDATA[<p><img width="1600" height="800" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Materia KV: our easy-to-use serverless key-value database is available to all" decoding="async" fetchpriority="high" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en.png 1600w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-300x150.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-1024x512.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-768x384.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-1536x768.png 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-1368x684.png 1368w" sizes="(max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p>They “push” their code, and we deploy it, while ensuring that the environment in which they operate is kept up to date and secure, with one clear objective: maintaining it in operational condition. Whatever the situation, their service responds.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Designing simple, robust and innovative services</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We do this whilst minimizing the footprint on our servers, offering on-demand or automatic horizontal/vertical scaling. This means we can multiply instances or scale them up / down according to the load of your sites. This commitment to simplicity extends beyond applications, as we also offer a wide range of “as-a-service” database (DB) services, enabling you to deploy <a href="https://stagingv6.cleverapps.io/product/mongodb/">MongoDB</a>, <a href="https://stagingv6.cleverapps.io/product/mysql/">MySQL</a>, <a href="https://stagingv6.cleverapps.io/product/postgresql/">PostgreSQL</a> or <a href="https://stagingv6.cleverapps.io/product/redis/">Redis</a> environments in a matter of seconds, with the same tools and guarantees.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>However, over the past few years, we faced a number of recurring requests: not only did some of our customers wish to access other services, but they also regularly asked to take benefit of our infrastructure, spread over three datacenters, to obtain high-availability services. But when it comes to DB, this isn't always easy to implement while ensuring a high level of automation and data consistency. So we decided to develop our own range of products to achieve this.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The “<a href="https://stagingv6.cleverapps.io/materia/">Materia</a>” project was born, based on the <a href="https://www.foundationdb.org/" target="_blank" rel="noreferrer noopener">FoundationDB</a> open-source transactional engine used, for example, by <a href="https://www.apple.com/" target="_blank" rel="noreferrer noopener">Apple</a> for its iCloud services and by <a href="https://www.snowflake.com/en/" target="_blank" rel="noreferrer noopener">Snowflake</a>. We're contributing to it and adapting it to our needs, while taking advantage of its distributed and resilient aspect, notably due to its significant <a href="https://apple.github.io/foundationdb/testing.html" target="_blank" rel="noreferrer noopener">simulation</a> capacity. It allows us to imagine a whole universe of serverless services, very simple to use, invoiced on a pay-per-use basis, with compatibility layers we're developing to enable our customers to “talk” to it using existing protocols such as DynamoDB, GraphQL or PostgreSQL, for example.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Materia KV available to all</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We started with the Redis protocol to introduce Materia KV, <strong>currently in Alpha testing phase</strong>. It's a key-value database synchronously replicated across our three Paris datacenters. When our servers respond, your data has been written three times. Above all, it's very easy to use: go to our <a href="https://console.clever-cloud.com">Console</a>, create a Materia KV add-on, and you'll instantly obtain a token that can be used with any Redis client or by sending commands to our servers directly through the TCP protocol.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Thus, you can now benefit from a high-availability, key-value data storage solution, without having to configure a single instance, and with no minimum monthly fee: you simply pay for what you use. Above all, we provide this service with compatibility to existing protocols. Today Redis, tomorrow DynamoDB and GraphQL. The list of supported commands is available <a href="https://developers.clever-cloud.com/doc/addons/materia-kv/#supported-types-and-commands">here</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Launched at <a href="https://stagingv6.cleverapps.io/blog/company/2024/04/16/materiadb-kv-materia-functions/">Devoxx France mid-April</a>, Materia KV made a big splash on site and during our demonstrations since then. We've therefore decided to make it available to all, to enable our customers and the interested public to give us feedback on how it works for them, and what their needs are. While billing will be on a per-use basis starting with the Beta phase, right now it's free! So give it a try and <a href="https://github.com/CleverCloud/Community/discussions/categories/materia" target="_blank" rel="noreferrer noopener">let us know what you think</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"is-style-outline"} -->
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="https://console.clever-cloud.com/users/me/addons/new" target="_blank" rel="noreferrer noopener">Create a Materia KV add-on</a></div>
<!-- /wp:button -->

<!-- wp:button {"className":"is-style-outline"} -->
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="https://developers.clever-cloud.com/doc/addons/materia-kv/" target="_blank" rel="noreferrer noopener">Materia KV documentation</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Already built-in our tools and interfaces</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Materia KV is of course available as an addon-provider in <a href="https://developers.clever-cloud.com/api/">our API</a>, <a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest/docs" target="_blank" rel="noreferrer noopener">Terraform</a> (or OpenTofu, for example), but also in our CLI, <a href="https://github.com/CleverCloud/clever-tools" target="_blank" rel="noreferrer noopener">Clever Tools</a>. To create an access token, simply run the following command:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever addon create kv NAME</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>This add-on can be linked directly to a Clever Cloud application, injecting its environment variables. But you can also use it from any third-party service, command-line client (CLI) or with graphical user interface (GUI).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>While Materia KV and its various interfaces will be developed over time, we've started to think about integrating it into Clever Tools. A test branch, available <a href="https://github.com/CleverCloud/clever-tools/pull/725" target="_blank" rel="noreferrer noopener">as a binary</a> and <a href="https://github.com/CleverCloud/clever-tools/blob/davlgd-embedded-kv-client/docs/kv.md" target="_blank" rel="noreferrer noopener">documented</a>, offers a clever <code>kv command</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With it, you can directly send requests to Materia KV by having the environment variable configured locally, or by specifying an ID in your commands:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash"># With Bash and Zsh
source <(clever addon env ADDON_ID --export)
# With Fish
clever addon env ADDON_ID --export | source

clever kv PING # PONG
clever kv set yourKey theValue
clever kv get yourKey</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>As this demo version doesn't handle all the commands managed by Materia KV, you can send a “raw” command and it will return the answer :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever kv redis_raw 'hset key field1 value1 field2 value2' # 2
clever kv redis_raw 'hget key field2'                      # value2
clever kv redis_raw 'hgetall key'                          # the full hash</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>To demonstrate the possibilities of such integration, you also have the option of directly querying a JSON object stored in a key :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever kv set simpleJson '{"key": "value"}' # the set data
clever kv getJson simpleJson key            # value
clever kv set jsonKey '[{"key": "value"}, {"bigKey": {"subKey1": "subValue1","subKey2": "subValue2"}}]'
clever kv getjson jsonKey bigKey.subKey2    # subValue1
clever kv getjson jsonKey ''                # the full JSON</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>To show just how simple such implementations can be, we've written a Materia KV client <a href="https://github.com/CleverCloud/mkv-go-cli" target="_blank" rel="noreferrer noopener">in Go</a> using Go-Redis. If you'd rather understand how you can send commands and receive responses from Materia KV directly in TCP, you'll find examples in both <a href="https://github.com/CleverCloud/mkv-raw-tcp-v" target="_blank" rel="noreferrer noopener">V</a> or <a href="https://github.com/CleverCloud/mkv-raw-tcp-ruby" target="_blank" rel="noreferrer noopener">Ruby</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Feel free to create your own and let us know ;)</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A demonstration of Materia KV on Twitch, a community space</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":12691,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2024/06/2024-06-05--clever-cloud--twitch--thumbnail--materia-kv--en-1024x576.png" alt="" class="wp-image-12691"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Want to find out more? Horacio González, our head of DevRel, will be giving a demonstration <a href="https://www.twitch.tv/clevercloud" target="_blank" rel="noreferrer noopener">on Twitch</a> on Tuesday June 18 at 13h15 (Paris Time). Pierre Zemb, creator of Materia at Clever Cloud, will also be discussing with our CTO Steven Le Roux in a video published at the end of June on <a href="https://www.youtube.com/c/Clevercloud-platform" target="_blank" rel="noreferrer noopener">Clever Cloud's YouTube channel</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>And to share your views, questions and requirements, go to the Materia-dedicated section of our <a href="https://github.com/CleverCloud/Community/discussions/categories/materia" target="_blank" rel="noreferrer noopener">GitHub community space</a>.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1600" height="800" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Materia KV: our easy-to-use serverless key-value database is available to all" decoding="async" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en.png 1600w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-300x150.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-1024x512.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-768x384.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-1536x768.png 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/06/materia-kv-alpha-publique-en-1368x684.png 1368w" sizes="(max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p>They “push” their code, and we deploy it, while ensuring that the environment in which they operate is kept up to date and secure, with one clear objective: maintaining it in operational condition. Whatever the situation, their service responds.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Designing simple, robust and innovative services</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We do this whilst minimizing the footprint on our servers, offering on-demand or automatic horizontal/vertical scaling. This means we can multiply instances or scale them up / down according to the load of your sites. This commitment to simplicity extends beyond applications, as we also offer a wide range of “as-a-service” database (DB) services, enabling you to deploy <a href="https://stagingv6.cleverapps.io/product/mongodb/">MongoDB</a>, <a href="https://stagingv6.cleverapps.io/product/mysql/">MySQL</a>, <a href="https://stagingv6.cleverapps.io/product/postgresql/">PostgreSQL</a> or <a href="https://stagingv6.cleverapps.io/product/redis/">Redis</a> environments in a matter of seconds, with the same tools and guarantees.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>However, over the past few years, we faced a number of recurring requests: not only did some of our customers wish to access other services, but they also regularly asked to take benefit of our infrastructure, spread over three datacenters, to obtain high-availability services. But when it comes to DB, this isn't always easy to implement while ensuring a high level of automation and data consistency. So we decided to develop our own range of products to achieve this.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The “<a href="https://stagingv6.cleverapps.io/materia/">Materia</a>” project was born, based on the <a href="https://www.foundationdb.org/" target="_blank" rel="noreferrer noopener">FoundationDB</a> open-source transactional engine used, for example, by <a href="https://www.apple.com/" target="_blank" rel="noreferrer noopener">Apple</a> for its iCloud services and by <a href="https://www.snowflake.com/en/" target="_blank" rel="noreferrer noopener">Snowflake</a>. We're contributing to it and adapting it to our needs, while taking advantage of its distributed and resilient aspect, notably due to its significant <a href="https://apple.github.io/foundationdb/testing.html" target="_blank" rel="noreferrer noopener">simulation</a> capacity. It allows us to imagine a whole universe of serverless services, very simple to use, invoiced on a pay-per-use basis, with compatibility layers we're developing to enable our customers to “talk” to it using existing protocols such as DynamoDB, GraphQL or PostgreSQL, for example.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Materia KV available to all</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We started with the Redis protocol to introduce Materia KV, <strong>currently in Alpha testing phase</strong>. It's a key-value database synchronously replicated across our three Paris datacenters. When our servers respond, your data has been written three times. Above all, it's very easy to use: go to our <a href="https://console.clever-cloud.com">Console</a>, create a Materia KV add-on, and you'll instantly obtain a token that can be used with any Redis client or by sending commands to our servers directly through the TCP protocol.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Thus, you can now benefit from a high-availability, key-value data storage solution, without having to configure a single instance, and with no minimum monthly fee: you simply pay for what you use. Above all, we provide this service with compatibility to existing protocols. Today Redis, tomorrow DynamoDB and GraphQL. The list of supported commands is available <a href="https://developers.clever-cloud.com/doc/addons/materia-kv/#supported-types-and-commands">here</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Launched at <a href="https://stagingv6.cleverapps.io/blog/company/2024/04/16/materiadb-kv-materia-functions/">Devoxx France mid-April</a>, Materia KV made a big splash on site and during our demonstrations since then. We've therefore decided to make it available to all, to enable our customers and the interested public to give us feedback on how it works for them, and what their needs are. While billing will be on a per-use basis starting with the Beta phase, right now it's free! So give it a try and <a href="https://github.com/CleverCloud/Community/discussions/categories/materia" target="_blank" rel="noreferrer noopener">let us know what you think</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"is-style-outline"} -->
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="https://console.clever-cloud.com/users/me/addons/new" target="_blank" rel="noreferrer noopener">Create a Materia KV add-on</a></div>
<!-- /wp:button -->

<!-- wp:button {"className":"is-style-outline"} -->
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button" href="https://developers.clever-cloud.com/doc/addons/materia-kv/" target="_blank" rel="noreferrer noopener">Materia KV documentation</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Already built-in our tools and interfaces</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Materia KV is of course available as an addon-provider in <a href="https://developers.clever-cloud.com/api/">our API</a>, <a href="https://registry.terraform.io/providers/CleverCloud/clevercloud/latest/docs" target="_blank" rel="noreferrer noopener">Terraform</a> (or OpenTofu, for example), but also in our CLI, <a href="https://github.com/CleverCloud/clever-tools" target="_blank" rel="noreferrer noopener">Clever Tools</a>. To create an access token, simply run the following command:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever addon create kv NAME</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>This add-on can be linked directly to a Clever Cloud application, injecting its environment variables. But you can also use it from any third-party service, command-line client (CLI) or with graphical user interface (GUI).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>While Materia KV and its various interfaces will be developed over time, we've started to think about integrating it into Clever Tools. A test branch, available <a href="https://github.com/CleverCloud/clever-tools/pull/725" target="_blank" rel="noreferrer noopener">as a binary</a> and <a href="https://github.com/CleverCloud/clever-tools/blob/davlgd-embedded-kv-client/docs/kv.md" target="_blank" rel="noreferrer noopener">documented</a>, offers a clever <code>kv command</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With it, you can directly send requests to Materia KV by having the environment variable configured locally, or by specifying an ID in your commands:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash"># With Bash and Zsh
source <(clever addon env ADDON_ID --export)
# With Fish
clever addon env ADDON_ID --export | source

clever kv PING # PONG
clever kv set yourKey theValue
clever kv get yourKey</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>As this demo version doesn't handle all the commands managed by Materia KV, you can send a “raw” command and it will return the answer :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever kv redis_raw 'hset key field1 value1 field2 value2' # 2
clever kv redis_raw 'hget key field2'                      # value2
clever kv redis_raw 'hgetall key'                          # the full hash</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>To demonstrate the possibilities of such integration, you also have the option of directly querying a JSON object stored in a key :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever kv set simpleJson '{"key": "value"}' # the set data
clever kv getJson simpleJson key            # value
clever kv set jsonKey '[{"key": "value"}, {"bigKey": {"subKey1": "subValue1","subKey2": "subValue2"}}]'
clever kv getjson jsonKey bigKey.subKey2    # subValue1
clever kv getjson jsonKey ''                # the full JSON</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>To show just how simple such implementations can be, we've written a Materia KV client <a href="https://github.com/CleverCloud/mkv-go-cli" target="_blank" rel="noreferrer noopener">in Go</a> using Go-Redis. If you'd rather understand how you can send commands and receive responses from Materia KV directly in TCP, you'll find examples in both <a href="https://github.com/CleverCloud/mkv-raw-tcp-v" target="_blank" rel="noreferrer noopener">V</a> or <a href="https://github.com/CleverCloud/mkv-raw-tcp-ruby" target="_blank" rel="noreferrer noopener">Ruby</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Feel free to create your own and let us know ;)</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">A demonstration of Materia KV on Twitch, a community space</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":12691,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2024/06/2024-06-05--clever-cloud--twitch--thumbnail--materia-kv--en-1024x576.png" alt="" class="wp-image-12691"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Want to find out more? Horacio González, our head of DevRel, will be giving a demonstration <a href="https://www.twitch.tv/clevercloud" target="_blank" rel="noreferrer noopener">on Twitch</a> on Tuesday June 18 at 13h15 (Paris Time). Pierre Zemb, creator of Materia at Clever Cloud, will also be discussing with our CTO Steven Le Roux in a video published at the end of June on <a href="https://www.youtube.com/c/Clevercloud-platform" target="_blank" rel="noreferrer noopener">Clever Cloud's YouTube channel</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>And to share your views, questions and requirements, go to the Materia-dedicated section of our <a href="https://github.com/CleverCloud/Community/discussions/categories/materia" target="_blank" rel="noreferrer noopener">GitHub community space</a>.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Materia KV, Functions: discover the future of Clever Cloud at Devoxx Paris 2024</title>
		<link>https://stagingv6.cleverapps.io/blog/company/2024/04/16/materiadb-kv-materia-functions/</link>
		
		<dc:creator><![CDATA[David Legrand]]></dc:creator>
		<pubDate>Tue, 16 Apr 2024 11:37:00 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=12175</guid>

					<description><![CDATA[<p><img width="1800" height="710" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="materia banner" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en.png 1800w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-300x118.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-1024x404.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-768x303.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-1536x606.png 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-1368x540.png 1368w" sizes="auto, (max-width: 1800px) 100vw, 1800px" /></p><!-- wp:paragraph -->
<p>Clever Cloud was founded nearly fifteen years ago, out of a desire to innovate in the field of web hosting and deployment, by offering a reliable range of services in a simple, straightforward way. As a result, we became Europe's leading provider of PaaS services, attracting developers and key accounts alike.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>More importantly, we are unique in offering these solutions on our own infrastructure, as well as on-premise or through various partners around the world. We now do this with <a href="https://stagingv6.cleverapps.io/fr/blog/entreprise/2024/03/22/clever-cloud-iso-27001/" target="_blank" rel="noreferrer noopener">ISO 9001 and 27001:2022 certification</a>, with HDS and SecNumCloud as our next targets.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Over the years, our company and its product range evolved and expanded. But we've never compromised with our original vocation: innovation. That's why, alongside the continuous improvement of our services, interfaces and integrations, we are massively investing in the development of our future, in solutions that will meet our customers' needs ever more effectively, and over which we have full control.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is where the independence and sovereignty of our offering comes in. That's why we've decided to build our own infrastructures, to choose a GNU/Linux system to which we actively contribute, and to use it on both our servers and our network equipment. It's also why we've spent the last few years developing<strong> a range of serverless, easy-to-use, pay-as-you-go products</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><a href="https://stagingv6.cleverapps.io/blog/company/2022/09/06/whats-clever-in-our-cloud/">What’s Clever in our cloud ?</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Clever Functions: WASM stands for compatibility and efficiency</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To achieve this, we didn't hesitate to <strong>create our own</strong> low-level <strong>virtualization and function execution layer</strong>. We wanted to maintain our strong isolation criteria by setting up virtual machines that we activate as close as possible to the CPU. We also wanted to be able to achieve good performance while opening up to a wide range of languages, rather than simply relying on v8 at the risk of focusing almost exclusively on JavaScript.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So we opted instead for a solution that leverages the capabilities of the <a href="https://webassembly.org/" target="_blank" rel="noreferrer noopener">WebAssembly</a> standard (WASM/WASI), which can be used with a wide range of languages, from Go to Zig as well as C, Rust or AssemblyScript... and of course JavaScript.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>After a successful first demo of our Tech Preview in Barcelona at the WASM.io conference last month, we<strong>'ll be demonstrating again at Devoxx Paris</strong>, which takes place at the Palais des Congrès from April 17 to 19. Feel free to come and talk to us about it, and let us know if you're interested in taking part in the next stages of development of this product, which will be progressively opened up over the course of the year.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Materia KV: our distributed, multi-protocol, serverless revolution</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Another major innovation from our team is the new Materia offering. To achieve this, <strong>we have designed our own serverless</strong> databases, built on the <a href="https://www.foundationdb.org/">F</a><a href="https://www.foundationdb.org/" target="_blank" rel="noreferrer noopener">o</a><a href="https://www.foundationdb.org/">undationDB</a> open source transactional engine, used, for example, by Apple for its iCloud services. We are also an active member of its community, participating in the development of its ecosystem.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Distributed and robust, notably thanks to its high <a href="https://apple.github.io/foundationdb/testing.html" target="_blank" rel="noreferrer noopener">simulation</a> capacity, it has enabled us to design and build a whole range of services to meet the different needs expressed by our customers in recent years. Our approach is always open and resilient, with deployment across multiple availability zones, compatibility with existing protocols and clients, and pay-as-you-go billing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first to be publicly announced is <strong>Materia KV, which, as its name suggests, is a key-value</strong> database. To create one within your Clever Cloud account, you have no instance size to choose, no storage capacity to worry about. We simply provide you with a host address, a port and a token (based on the <a href="https://www.biscuitsec.org/">Biscuit</a> technology to which we actively contribute), and you're ready to go!</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You can then send us your keys and their contents. They will be synchronously replicated in our three Paris datacenters. So you don't have to set up any complex configurations to ensure high availability, or even activate any options. <strong>Materia KV is resilient by design</strong>! And it adapts to individual needs, as it's billed on a pay-as-you-go basis. It's the perfect solution for hobbyists, seasoned developers and key accounts alike.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Redis API compatibility… to start with</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We didn't want this innovation to come at the cost of complex configuration, requiring the use of special clients and ORMs. That's why we'<strong>ve developed Materia KV's own compatibility layers</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>To "talk" to it, you don't need a special API or tools specific to Clever Cloud. <strong>You can use it with existing solutions for DynamoDB, GraphQL or Redis</strong>. The latter is the first of the compatibility layers available in our test phase. It enables customers using a Redis instance for their application to migrate to Materia KV with just a few clicks in their interface or via <a href="https://github.com/CleverCloud/clever-tools" target="_blank" rel="noreferrer noopener">Clever Tools</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This solution will be <strong>publicly demonstrated for the first time at Devoxx Paris</strong>, which takes place at the Palais des Congrès from April 17 to 19. It will then be rapidly made available to all our customers in alpha. Feel free to come and talk to us about it, and the other serverless services we'll be offering later this year.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We'll also be demonstrating other upcoming new features, such as our <strong>Keycloak-as-a-Service</strong> solution in partnership with <a href="https://please-open.it/" target="_blank" rel="noreferrer noopener">Please Open It</a>, and celebrating the release of <strong><a href="https://github.com/sozu-proxy/sozu/releases/tag/1.0.0">version 1.0</a> of our in-house, open source load balancer, developed in Rust: SŌZU!</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>To keep up to date with our regular developments, be sure to follow <a href="https://developers.clever-cloud.com/changelog" target="_blank" rel="noreferrer noopener">our Changelog</a> (via <a href="https://developers.clever-cloud.com/changelog/index.xml" target="_blank" rel="noreferrer noopener">its RSS feed</a>), or this <a href="https://stagingv6.cleverapps.io/blog/" rel="noreferrer noopener">blog</a>. But also follow us on <a href="https://www.linkedin.com/company/clever-cloud/mycompany/" target="_blank" rel="noreferrer noopener">LinkedIn</a> or <a href="https://twitter.com/clever_cloud" target="_blank" rel="noreferrer noopener">X/Twitter</a>.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1800" height="710" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="materia banner" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en.png 1800w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-300x118.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-1024x404.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-768x303.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-1536x606.png 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2024/04/materia-en-1368x540.png 1368w" sizes="auto, (max-width: 1800px) 100vw, 1800px" /></p><!-- wp:paragraph -->
<p>Clever Cloud was founded nearly fifteen years ago, out of a desire to innovate in the field of web hosting and deployment, by offering a reliable range of services in a simple, straightforward way. As a result, we became Europe's leading provider of PaaS services, attracting developers and key accounts alike.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>More importantly, we are unique in offering these solutions on our own infrastructure, as well as on-premise or through various partners around the world. We now do this with <a href="https://stagingv6.cleverapps.io/fr/blog/entreprise/2024/03/22/clever-cloud-iso-27001/" target="_blank" rel="noreferrer noopener">ISO 9001 and 27001:2022 certification</a>, with HDS and SecNumCloud as our next targets.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Over the years, our company and its product range evolved and expanded. But we've never compromised with our original vocation: innovation. That's why, alongside the continuous improvement of our services, interfaces and integrations, we are massively investing in the development of our future, in solutions that will meet our customers' needs ever more effectively, and over which we have full control.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is where the independence and sovereignty of our offering comes in. That's why we've decided to build our own infrastructures, to choose a GNU/Linux system to which we actively contribute, and to use it on both our servers and our network equipment. It's also why we've spent the last few years developing<strong> a range of serverless, easy-to-use, pay-as-you-go products</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li><a href="https://stagingv6.cleverapps.io/blog/company/2022/09/06/whats-clever-in-our-cloud/">What’s Clever in our cloud ?</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Clever Functions: WASM stands for compatibility and efficiency</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To achieve this, we didn't hesitate to <strong>create our own</strong> low-level <strong>virtualization and function execution layer</strong>. We wanted to maintain our strong isolation criteria by setting up virtual machines that we activate as close as possible to the CPU. We also wanted to be able to achieve good performance while opening up to a wide range of languages, rather than simply relying on v8 at the risk of focusing almost exclusively on JavaScript.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So we opted instead for a solution that leverages the capabilities of the <a href="https://webassembly.org/" target="_blank" rel="noreferrer noopener">WebAssembly</a> standard (WASM/WASI), which can be used with a wide range of languages, from Go to Zig as well as C, Rust or AssemblyScript... and of course JavaScript.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>After a successful first demo of our Tech Preview in Barcelona at the WASM.io conference last month, we<strong>'ll be demonstrating again at Devoxx Paris</strong>, which takes place at the Palais des Congrès from April 17 to 19. Feel free to come and talk to us about it, and let us know if you're interested in taking part in the next stages of development of this product, which will be progressively opened up over the course of the year.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Materia KV: our distributed, multi-protocol, serverless revolution</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Another major innovation from our team is the new Materia offering. To achieve this, <strong>we have designed our own serverless</strong> databases, built on the <a href="https://www.foundationdb.org/">F</a><a href="https://www.foundationdb.org/" target="_blank" rel="noreferrer noopener">o</a><a href="https://www.foundationdb.org/">undationDB</a> open source transactional engine, used, for example, by Apple for its iCloud services. We are also an active member of its community, participating in the development of its ecosystem.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Distributed and robust, notably thanks to its high <a href="https://apple.github.io/foundationdb/testing.html" target="_blank" rel="noreferrer noopener">simulation</a> capacity, it has enabled us to design and build a whole range of services to meet the different needs expressed by our customers in recent years. Our approach is always open and resilient, with deployment across multiple availability zones, compatibility with existing protocols and clients, and pay-as-you-go billing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first to be publicly announced is <strong>Materia KV, which, as its name suggests, is a key-value</strong> database. To create one within your Clever Cloud account, you have no instance size to choose, no storage capacity to worry about. We simply provide you with a host address, a port and a token (based on the <a href="https://www.biscuitsec.org/">Biscuit</a> technology to which we actively contribute), and you're ready to go!</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You can then send us your keys and their contents. They will be synchronously replicated in our three Paris datacenters. So you don't have to set up any complex configurations to ensure high availability, or even activate any options. <strong>Materia KV is resilient by design</strong>! And it adapts to individual needs, as it's billed on a pay-as-you-go basis. It's the perfect solution for hobbyists, seasoned developers and key accounts alike.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Redis API compatibility… to start with</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We didn't want this innovation to come at the cost of complex configuration, requiring the use of special clients and ORMs. That's why we'<strong>ve developed Materia KV's own compatibility layers</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>To "talk" to it, you don't need a special API or tools specific to Clever Cloud. <strong>You can use it with existing solutions for DynamoDB, GraphQL or Redis</strong>. The latter is the first of the compatibility layers available in our test phase. It enables customers using a Redis instance for their application to migrate to Materia KV with just a few clicks in their interface or via <a href="https://github.com/CleverCloud/clever-tools" target="_blank" rel="noreferrer noopener">Clever Tools</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This solution will be <strong>publicly demonstrated for the first time at Devoxx Paris</strong>, which takes place at the Palais des Congrès from April 17 to 19. It will then be rapidly made available to all our customers in alpha. Feel free to come and talk to us about it, and the other serverless services we'll be offering later this year.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We'll also be demonstrating other upcoming new features, such as our <strong>Keycloak-as-a-Service</strong> solution in partnership with <a href="https://please-open.it/" target="_blank" rel="noreferrer noopener">Please Open It</a>, and celebrating the release of <strong><a href="https://github.com/sozu-proxy/sozu/releases/tag/1.0.0">version 1.0</a> of our in-house, open source load balancer, developed in Rust: SŌZU!</strong> </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>To keep up to date with our regular developments, be sure to follow <a href="https://developers.clever-cloud.com/changelog" target="_blank" rel="noreferrer noopener">our Changelog</a> (via <a href="https://developers.clever-cloud.com/changelog/index.xml" target="_blank" rel="noreferrer noopener">its RSS feed</a>), or this <a href="https://stagingv6.cleverapps.io/blog/" rel="noreferrer noopener">blog</a>. But also follow us on <a href="https://www.linkedin.com/company/clever-cloud/mycompany/" target="_blank" rel="noreferrer noopener">LinkedIn</a> or <a href="https://twitter.com/clever_cloud" target="_blank" rel="noreferrer noopener">X/Twitter</a>.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Announcing our new Ticket Center</title>
		<link>https://stagingv6.cleverapps.io/blog/features/2022/05/19/announcing-our-new-ticket-center/</link>
		
		<dc:creator><![CDATA[Julie Nolot]]></dc:creator>
		<pubDate>Thu, 19 May 2022 06:34:43 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=6444</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="ticket_center" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>We are delighted to announce the arrival of our new support system: the Ticket Center. In order to continue to provide one of the best support services on the market, we remain attentive to our customers' feedback on our quality of service. In this context, we have received numerous requests to implement a system that better distinguishes each conversation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We therefore considered how best to continue to provide a fast and quality service and the introduction of a ticketing system seemed to be the most appropriate solution to meet the needs and expectations of our users.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What's new</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Ticket-oriented use</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Now, the platform usage is more "ticket" than "chat" oriented. This allows for a unique authentication of each request to ensure better follow-up.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Adding participants to the conversation</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>You can now choose to automatically add members of the relevant organisation when opening a ticket. This improves your Crisp experience by ensuring that the response from our support team is accessible to all your organisation team.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When you open a ticket :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>If you are an admin, the other admins in the organisation will be added</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>If your role is different of admin, members of the organisation with the same role as you will be added</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">How does the Ticket Center work?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Accessing the Ticket Center from an organisation</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We have integrated a new button "Contact support team" in the console, at the top of an organisation. It will allow you to open the Ticket Center directly in the context of the organisation you are in. This allows support to know at a glance which organisation you are opening a ticket for.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6543,"width":413,"height":287,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://cdn.clever-cloud.com/uploads/2022/05/capture-decran-2022-05-05-a-14-51-07.png" alt="contact_support_team " class="wp-image-6543" style="width:413px;height:287px" width="413" height="287"/><figcaption class="wp-element-caption">"Contact support team" to access the Ticket Center</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Accessing the Ticket Center from the console's main menu</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The button used until now, which was called "talk to a human" still exists, under the name "contact support". You can find it as before, at the bottom left of the main console menu. A "Select your organisation" page will then open to allow you to specify the organisation for which you wish to create a ticket.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6547,"width":327,"height":261,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://cdn.clever-cloud.com/uploads/2022/05/capture-decran-2022-05-05-a-14-51-21.png" alt="contacter_un_humain_legacy" class="wp-image-6547" style="width:327px;height:261px" width="327" height="261"/><figcaption class="wp-element-caption">The "Contact support team" button,<br>formerly known as "talk to a human"</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"align":"center","id":6548,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/capture-decran-2022-05-05-a-14-58-56.png" alt="contexte_organisation" class="wp-image-6548"/><figcaption class="wp-element-caption">Select the organisation for wish you're opening your ticket</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Create a ticket</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>When you open the Ticket Center, you will find the history of your previous tickets. Please note that all your previous chat conversations with support have been converted into a single ticket, so you will be able to access all your former discussions if required.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6551,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/historique-et-creation-de-ticket.png" alt="historique-et-creation-de-ticket" class="wp-image-6551"/><figcaption class="wp-element-caption">Ticket history</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Here you can also: get information on the status of your request, view the associated conversation and open a new ticket.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6554,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/screenshot-2022-05-18-at-16-44-52.png" alt="créer_un_nouveau_ticket" class="wp-image-6554"/><figcaption class="wp-element-caption">Open a new ticket</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Giving your feedback</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Once the ticket is closed, you will receive an email as usual to give your feedback, this is the time to give us your opinion on the service that was provided to you by the support.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6556,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/donner-son-avis-crisp.png" alt="donner_son_avis_crisp" class="wp-image-6556"/><figcaption class="wp-element-caption">Give your feedback</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What it allows</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>With the old way of working, conversations between support and a user often contained several different topics. Today, each request counts, in a unique way, which brings :&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>Better follow-up of requests.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>A more collaborative tool, by allowing you to add participants to the conversation</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>A more efficient response thanks to the unique identification of each ticket.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>We are confident this new Ticket Center will allow us to continue to provide a fast and quality service. Feel free to contact us and give us your feedback and ideas regarding this new system.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="ticket_center" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/05/ticket-center-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>We are delighted to announce the arrival of our new support system: the Ticket Center. In order to continue to provide one of the best support services on the market, we remain attentive to our customers' feedback on our quality of service. In this context, we have received numerous requests to implement a system that better distinguishes each conversation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We therefore considered how best to continue to provide a fast and quality service and the introduction of a ticketing system seemed to be the most appropriate solution to meet the needs and expectations of our users.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What's new</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Ticket-oriented use</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Now, the platform usage is more "ticket" than "chat" oriented. This allows for a unique authentication of each request to ensure better follow-up.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Adding participants to the conversation</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>You can now choose to automatically add members of the relevant organisation when opening a ticket. This improves your Crisp experience by ensuring that the response from our support team is accessible to all your organisation team.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When you open a ticket :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>If you are an admin, the other admins in the organisation will be added</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>If your role is different of admin, members of the organisation with the same role as you will be added</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">How does the Ticket Center work?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Accessing the Ticket Center from an organisation</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We have integrated a new button "Contact support team" in the console, at the top of an organisation. It will allow you to open the Ticket Center directly in the context of the organisation you are in. This allows support to know at a glance which organisation you are opening a ticket for.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6543,"width":413,"height":287,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://cdn.clever-cloud.com/uploads/2022/05/capture-decran-2022-05-05-a-14-51-07.png" alt="contact_support_team " class="wp-image-6543" style="width:413px;height:287px" width="413" height="287"/><figcaption class="wp-element-caption">"Contact support team" to access the Ticket Center</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Accessing the Ticket Center from the console's main menu</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The button used until now, which was called "talk to a human" still exists, under the name "contact support". You can find it as before, at the bottom left of the main console menu. A "Select your organisation" page will then open to allow you to specify the organisation for which you wish to create a ticket.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6547,"width":327,"height":261,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img src="https://cdn.clever-cloud.com/uploads/2022/05/capture-decran-2022-05-05-a-14-51-21.png" alt="contacter_un_humain_legacy" class="wp-image-6547" style="width:327px;height:261px" width="327" height="261"/><figcaption class="wp-element-caption">The "Contact support team" button,<br>formerly known as "talk to a human"</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"align":"center","id":6548,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/capture-decran-2022-05-05-a-14-58-56.png" alt="contexte_organisation" class="wp-image-6548"/><figcaption class="wp-element-caption">Select the organisation for wish you're opening your ticket</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Create a ticket</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>When you open the Ticket Center, you will find the history of your previous tickets. Please note that all your previous chat conversations with support have been converted into a single ticket, so you will be able to access all your former discussions if required.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6551,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/historique-et-creation-de-ticket.png" alt="historique-et-creation-de-ticket" class="wp-image-6551"/><figcaption class="wp-element-caption">Ticket history</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Here you can also: get information on the status of your request, view the associated conversation and open a new ticket.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6554,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/screenshot-2022-05-18-at-16-44-52.png" alt="créer_un_nouveau_ticket" class="wp-image-6554"/><figcaption class="wp-element-caption">Open a new ticket</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Giving your feedback</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Once the ticket is closed, you will receive an email as usual to give your feedback, this is the time to give us your opinion on the service that was provided to you by the support.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":6556,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/05/donner-son-avis-crisp.png" alt="donner_son_avis_crisp" class="wp-image-6556"/><figcaption class="wp-element-caption">Give your feedback</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 class="wp-block-heading">What it allows</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>With the old way of working, conversations between support and a user often contained several different topics. Today, each request counts, in a unique way, which brings :&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><!-- wp:list-item -->
<li>Better follow-up of requests.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>A more collaborative tool, by allowing you to add participants to the conversation</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>A more efficient response thanks to the unique identification of each ticket.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>We are confident this new Ticket Center will allow us to continue to provide a fast and quality service. Feel free to contact us and give us your feedback and ideas regarding this new system.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to deploy Keycloak on Clever Cloud</title>
		<link>https://stagingv6.cleverapps.io/blog/features/2022/05/11/how-to-deploy-keycloak-on-clever-cloud/</link>
		
		<dc:creator><![CDATA[Antoine BLONDEAU]]></dc:creator>
		<pubDate>Wed, 11 May 2022 06:43:26 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Engineering]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=6138</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="banniere_keycloak" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>Keycloak is a modern and efficient way to deal with identity and access management. It allows for single sign-on, user federation across multiple user directories. It is also compliant with standard authentication protocols like OpenID Connect, OAuth2 or SAML. All details are available on its <a href="https://www.keycloak.org/">website</a>. This blogpost will go through steps to deploy Keycloack and Grafana on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>How to deploy Keycloak</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>Setup</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Keycloak is written in Java, and gives a JAR file in their release, which means we will use a <a href="https://stagingv6.cleverapps.io/doc/deploy/application/java/java-jar/">a JAVA runtime with a JAR deployment</a>. It also requires a <a href="https://www.postgresql.org/">PostgreSQL Database</a>, which means we will deploy a <a href="https://stagingv6.cleverapps.io/doc/deploy/addon/postgresql/postgresql/">PostgreSQL addon</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Get lastest Keycloak release
wget https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-17.0.1.zip

# Extract the archive
unzip keycloak-17.0.1.zip

# Go to the folder
cd keycloak-17.0.1

# Create the jar application
clever create --type jar keycloak-server
export KEYCLOAK_DOMAIN=$(clever domain | xargs)

# Create the PG addon
clever addon create postgresql-addon --plan s_sml --addon-version 10 keycloak-postgres

# Link the addon
clever service link-addon keycloak-postgres</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Configure</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For now we will configure Keycloak through environment variables. Note that you can also do configure Keycloak through its CLI or through a file, as stated in its <a href="https://www.keycloak.org/server/configuration">documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note:</strong> For the configuration through environment variables; the pattern to use is <code>KC_</code> and the uppercase name of any configuration key, separated by underscores.</p></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Export env for templating purpose
export $(clever env | sed '/^#/d;s/\"//g')

clever env set CC_JAR_PATH lib/quarkus-run.jar
clever env set CC_JAVA_VERSION 11
clever env set CC_RUN_COMMAND "bin/kc.sh start --auto-build"

clever env set KC_DB postgres
clever env set KC_DB_USERNAME $POSTGRESQL_ADDON_USER
clever env set KC_DB_PASSWORD $POSTGRESQL_ADDON_PASSWORD
clever env set KC_DB_URL "jdbc:postgresql://$POSTGRESQL_ADDON_HOST:$POSTGRESQL_ADDON_PORT/$POSTGRESQL_ADDON_DB"
clever env set KC_HOSTNAME $KEYCLOAK_DOMAIN
clever env set KC_HTTP_ENABLED true
clever env set KC_PROXY passthrough
clever env set KC_PROXY_ADDRESS_FORWARDING true
</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note: </strong>Consider setting KC_DB_POOL_MAX_SIZE at a lower value (default is 100) regarding the database size you ordered earlier. You can find the connection limit <a href="https://stagingv6.cleverapps.io/pricing/#databases">here</a>. If you used the S_SML size that is in the command earlier, you can ignore this message. You can also fine tune the database connection pool using KC_DB_POOL_INITIAL_SIZE and KC_DB_POOL_MIN_SIZE</p></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Now, you need to define KEYCLOAK_ADMIN and KEYCLOAK_ADMIN_PASSWORD :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set KEYCLOAK_ADMIN &lt;choose an admin username&gt;
clever env set KEYCLOAK_ADMIN_PASSWORD &lt;choose an admin password&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Deploy</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Deploy Keycloak on Clever Cloud:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Init a git repository
git init

# Add your files
git add .

# Create the first commit
git commit -m "clever init"

# Deploy the application
clever deploy

# Open Keycloak in your browser
clever open</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Validate the configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>You can follow the Keycloak documentation starting <a href="https://www.keycloak.org/getting-started/getting-started-zip#_create_a_realm">here</a> to ensure Keycloak works as expected. It will take you through a realm (tenant) creation, user creation and client creation/test.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Create an Initial Keycloak configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In the keycloak UI, ensure you create a Realm called "myrealm" (hover "Master" on the top left corner). Ensure the realm "<code>myrealm</code>" is selected.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p> Then, go to <em><strong>Users &gt; Add a User</strong></em>. Fill the Username, Email, First Name and Last Name fields, then hit <strong>save</strong>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the credentials tab of the user, add the password of your choice and <strong>deselect  "Temporary", the set password.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You're all set.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>A real world scenario</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":6184,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/04/giphy-1-1.webp" alt="" class="wp-image-6184"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Let's see how we can use Keycloak in the real world: as an SSO Proxy for Grafana, using Oauth 2.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Setup Grafana on Clever Cloud</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>If you need a in-depth guide on how to use or deploy Grafana please read this <a href="https://stagingv6.cleverapps.io/blog/features/2021/10/28/a-grafana-to-plot-applications-metrics/">article</a>, the following is a helper to illustrate the usages of Keycloak.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Let's use the <a href="https://github.com/CleverCloud/grafana-example">grafana-example</a> on Clever Cloud's Github repository.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Clone the repository
git clone https://github.com/CleverCloud/grafana-example.git

# Enter the directory
cd grafana-example

# Create a NodeJS Application
clever create --type node grafana
export GRAFANA_DOMAIN=$(clever domain | xargs)

# Configure Grafana
clever env set GRAFANA_VERSION 8.5.2
clever env set GRAFANA_PLUGINS "grafana-worldmap-panel"
clever env set GF_PLUGIN_DIR ./data/plugins

clever env set GF_SERVER_HTTP_PORT 8080
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note: </strong>In this section you need to set the GRAFANA_SHA_256 variable yourself. You can find the SHA256SUM required <a href="https://grafana.com/grafana/download/8.5.2?pg=get&amp;plcmt=selfmanaged-box1-cta1&amp;edition=oss">here</a>, next to "Standalone Linux Binaries"</p></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GRAFANA_SHA_256 &lt;SHA256SUM&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Configure Keycloak for OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note: </strong> In this section, you need to replace <code><code>$GRAFANA_DOMAIN</code></code> with the value you exported in the last section. You can find this value by running the following command: <code><code>clever domain</code></code></p></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>In the Keyloak UI, Go to <strong><em>Configure &gt; Clients &gt; Create</em></strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Create a new client with these configurations:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Client ID: $GRAFANA_DOMAIN
Client Protocol: openid-connect
Root URL: https://$GRAFANA_DOMAIN</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Further make these configurations:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Access Type: confidentials // The OAuth client must use a client id and secret.
Root URL: ${authBaseUrl}
Valid Redirect URIs: https://$GRAFANA_DOMAIN/login/generic_oauth
Base URL: /login/generic_oauth</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Clear <strong>Admin URL</strong> and <strong>Web Origins</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Click save and open the <strong>Credentials</strong> tab. Copy the Secret into a separate note, we will need it in the second and third part of this tutorial.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Open the tab <strong>Roles</strong> and click <strong>Add Role</strong>. Create a new role with name <code>admin</code>. This role defines the access level for Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Head over to <strong>Scope</strong> tab and set <strong>Full Scope Allowed </strong>to <code>OFF</code>. We do not want to share any other details about the realm in the client token.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then, we are going to configure a client mapper for the roles property. We must ensure that Grafana can extract the access role from the JWT token. Open the <strong>Mappers</strong> tab and click on <strong>Create</strong>. Create an entry with these options:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Name: Roles
Mapper Type: User Client Role
Client ID: $GRAFANA_DOMAIN
Token Claim Name: roles
Claim JSON type: string</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Finally, assign the client role to your Keycloak user: Go to<strong> </strong><em><strong>Users &gt; View All Users</strong></em> and click on the I<strong>D of your user</strong>. Click on the <strong>Role</strong> <strong>Mapping</strong> tab, then in the <strong>Client Roles</strong> selector, select <strong>$GRAFANA_DOMAIN</strong>. In the Available Roles section, select <code>admin</code> and click <strong>Add selected</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Configure Grafana for OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Configure appropriate env vars
clever env set GF_SERVER_DOMAIN $GRAFANA_DOMAIN
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"
clever env set GF_AUTH_GENERIC_OAUTH_ENABLED true
clever env set GF_AUTH_GENERIC_OAUTH_NAME Keycloak
clever env set GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP true
clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_ID $GRAFANA_DOMAIN

clever env set GF_AUTH_GENERIC_OAUTH_SCOPES profile
clever env set GF_AUTH_GENERIC_OAUTH_AUTH_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/auth"
clever env set GF_AUTH_GENERIC_OAUTH_TOKEN_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/token"
clever env set GF_AUTH_GENERIC_OAUTH_API_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/userinfo"
clever env set GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH "contains(roles[*], 'admin') &amp;&amp; 'Admin' || contains(roles[*], 'editor') &amp;&amp; 'Editor' || 'Viewer'"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note:</strong> In this section, you need to define GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET yourself, using the value in Keycloak UI, under Client &gt; $GRAFANA_URL &gt; Credentials</p></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET &lt;KEYCLOAK_CLIENT_SECRET&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>You can now deploy Grafana:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Deploy grafana
clever deploy

# Open grafana and try the Login with Keycloak button !
clever open</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Now hit login with Keycloak, and use the username and password you defined for the user you created Earlier in Keycloak.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Using the same procedure describe earlier to create the first user, you can now create more users and roles. Create the roles "editor" and/or "viewer" and assign them to your new users within Keycloak. Try to connect with those on Grafana and you will see the roles are propagated to Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sources: </p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li><a href="https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/">https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/</a></li><li><a href="https://www.keycloak.org/getting-started/getting-started-zip">https://www.keycloak.org/getting-started/getting-started-zip</a></li></ul>
<!-- /wp:list -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="banniere_keycloak" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/04/banniere-keycloak-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>Keycloak is a modern and efficient way to deal with identity and access management. It allows for single sign-on, user federation across multiple user directories. It is also compliant with standard authentication protocols like OpenID Connect, OAuth2 or SAML. All details are available on its <a href="https://www.keycloak.org/">website</a>. This blogpost will go through steps to deploy Keycloack and Grafana on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>How to deploy Keycloak</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>Setup</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Keycloak is written in Java, and gives a JAR file in their release, which means we will use a <a href="https://stagingv6.cleverapps.io/doc/deploy/application/java/java-jar/">a JAVA runtime with a JAR deployment</a>. It also requires a <a href="https://www.postgresql.org/">PostgreSQL Database</a>, which means we will deploy a <a href="https://stagingv6.cleverapps.io/doc/deploy/addon/postgresql/postgresql/">PostgreSQL addon</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Get lastest Keycloak release
wget https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-17.0.1.zip

# Extract the archive
unzip keycloak-17.0.1.zip

# Go to the folder
cd keycloak-17.0.1

# Create the jar application
clever create --type jar keycloak-server
export KEYCLOAK_DOMAIN=$(clever domain | xargs)

# Create the PG addon
clever addon create postgresql-addon --plan s_sml --addon-version 10 keycloak-postgres

# Link the addon
clever service link-addon keycloak-postgres</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Configure</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For now we will configure Keycloak through environment variables. Note that you can also do configure Keycloak through its CLI or through a file, as stated in its <a href="https://www.keycloak.org/server/configuration">documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note:</strong> For the configuration through environment variables; the pattern to use is <code>KC_</code> and the uppercase name of any configuration key, separated by underscores.</p></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Export env for templating purpose
export $(clever env | sed '/^#/d;s/\"//g')

clever env set CC_JAR_PATH lib/quarkus-run.jar
clever env set CC_JAVA_VERSION 11
clever env set CC_RUN_COMMAND "bin/kc.sh start --auto-build"

clever env set KC_DB postgres
clever env set KC_DB_USERNAME $POSTGRESQL_ADDON_USER
clever env set KC_DB_PASSWORD $POSTGRESQL_ADDON_PASSWORD
clever env set KC_DB_URL "jdbc:postgresql://$POSTGRESQL_ADDON_HOST:$POSTGRESQL_ADDON_PORT/$POSTGRESQL_ADDON_DB"
clever env set KC_HOSTNAME $KEYCLOAK_DOMAIN
clever env set KC_HTTP_ENABLED true
clever env set KC_PROXY passthrough
clever env set KC_PROXY_ADDRESS_FORWARDING true
</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note: </strong>Consider setting KC_DB_POOL_MAX_SIZE at a lower value (default is 100) regarding the database size you ordered earlier. You can find the connection limit <a href="https://stagingv6.cleverapps.io/pricing/#databases">here</a>. If you used the S_SML size that is in the command earlier, you can ignore this message. You can also fine tune the database connection pool using KC_DB_POOL_INITIAL_SIZE and KC_DB_POOL_MIN_SIZE</p></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>Now, you need to define KEYCLOAK_ADMIN and KEYCLOAK_ADMIN_PASSWORD :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set KEYCLOAK_ADMIN &lt;choose an admin username&gt;
clever env set KEYCLOAK_ADMIN_PASSWORD &lt;choose an admin password&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Deploy</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Deploy Keycloak on Clever Cloud:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Init a git repository
git init

# Add your files
git add .

# Create the first commit
git commit -m "clever init"

# Deploy the application
clever deploy

# Open Keycloak in your browser
clever open</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Validate the configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>You can follow the Keycloak documentation starting <a href="https://www.keycloak.org/getting-started/getting-started-zip#_create_a_realm">here</a> to ensure Keycloak works as expected. It will take you through a realm (tenant) creation, user creation and client creation/test.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Create an Initial Keycloak configuration</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In the keycloak UI, ensure you create a Realm called "myrealm" (hover "Master" on the top left corner). Ensure the realm "<code>myrealm</code>" is selected.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p> Then, go to <em><strong>Users &gt; Add a User</strong></em>. Fill the Username, Email, First Name and Last Name fields, then hit <strong>save</strong>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In the credentials tab of the user, add the password of your choice and <strong>deselect  "Temporary", the set password.</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You're all set.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>A real world scenario</h2>
<!-- /wp:heading -->

<!-- wp:image {"id":6184,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2022/04/giphy-1-1.webp" alt="" class="wp-image-6184"/></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Let's see how we can use Keycloak in the real world: as an SSO Proxy for Grafana, using Oauth 2.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Setup Grafana on Clever Cloud</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>If you need a in-depth guide on how to use or deploy Grafana please read this <a href="https://stagingv6.cleverapps.io/blog/features/2021/10/28/a-grafana-to-plot-applications-metrics/">article</a>, the following is a helper to illustrate the usages of Keycloak.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Let's use the <a href="https://github.com/CleverCloud/grafana-example">grafana-example</a> on Clever Cloud's Github repository.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Clone the repository
git clone https://github.com/CleverCloud/grafana-example.git

# Enter the directory
cd grafana-example

# Create a NodeJS Application
clever create --type node grafana
export GRAFANA_DOMAIN=$(clever domain | xargs)

# Configure Grafana
clever env set GRAFANA_VERSION 8.5.2
clever env set GRAFANA_PLUGINS "grafana-worldmap-panel"
clever env set GF_PLUGIN_DIR ./data/plugins

clever env set GF_SERVER_HTTP_PORT 8080
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note: </strong>In this section you need to set the GRAFANA_SHA_256 variable yourself. You can find the SHA256SUM required <a href="https://grafana.com/grafana/download/8.5.2?pg=get&amp;plcmt=selfmanaged-box1-cta1&amp;edition=oss">here</a>, next to "Standalone Linux Binaries"</p></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GRAFANA_SHA_256 &lt;SHA256SUM&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3>Configure Keycloak for OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note: </strong> In this section, you need to replace <code><code>$GRAFANA_DOMAIN</code></code> with the value you exported in the last section. You can find this value by running the following command: <code><code>clever domain</code></code></p></blockquote>
<!-- /wp:quote -->

<!-- wp:paragraph -->
<p>In the Keyloak UI, Go to <strong><em>Configure &gt; Clients &gt; Create</em></strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Create a new client with these configurations:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Client ID: $GRAFANA_DOMAIN
Client Protocol: openid-connect
Root URL: https://$GRAFANA_DOMAIN</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Further make these configurations:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Access Type: confidentials // The OAuth client must use a client id and secret.
Root URL: ${authBaseUrl}
Valid Redirect URIs: https://$GRAFANA_DOMAIN/login/generic_oauth
Base URL: /login/generic_oauth</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Clear <strong>Admin URL</strong> and <strong>Web Origins</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Click save and open the <strong>Credentials</strong> tab. Copy the Secret into a separate note, we will need it in the second and third part of this tutorial.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Open the tab <strong>Roles</strong> and click <strong>Add Role</strong>. Create a new role with name <code>admin</code>. This role defines the access level for Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Head over to <strong>Scope</strong> tab and set <strong>Full Scope Allowed </strong>to <code>OFF</code>. We do not want to share any other details about the realm in the client token.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then, we are going to configure a client mapper for the roles property. We must ensure that Grafana can extract the access role from the JWT token. Open the <strong>Mappers</strong> tab and click on <strong>Create</strong>. Create an entry with these options:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">Name: Roles
Mapper Type: User Client Role
Client ID: $GRAFANA_DOMAIN
Token Claim Name: roles
Claim JSON type: string</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Finally, assign the client role to your Keycloak user: Go to<strong> </strong><em><strong>Users &gt; View All Users</strong></em> and click on the I<strong>D of your user</strong>. Click on the <strong>Role</strong> <strong>Mapping</strong> tab, then in the <strong>Client Roles</strong> selector, select <strong>$GRAFANA_DOMAIN</strong>. In the Available Roles section, select <code>admin</code> and click <strong>Add selected</strong>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Configure Grafana for OAuth 2</h3>
<!-- /wp:heading -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Configure appropriate env vars
clever env set GF_SERVER_DOMAIN $GRAFANA_DOMAIN
clever env set GF_SERVER_ROOT_URL "https://$GRAFANA_DOMAIN"
clever env set GF_AUTH_GENERIC_OAUTH_ENABLED true
clever env set GF_AUTH_GENERIC_OAUTH_NAME Keycloak
clever env set GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP true
clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_ID $GRAFANA_DOMAIN

clever env set GF_AUTH_GENERIC_OAUTH_SCOPES profile
clever env set GF_AUTH_GENERIC_OAUTH_AUTH_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/auth"
clever env set GF_AUTH_GENERIC_OAUTH_TOKEN_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/token"
clever env set GF_AUTH_GENERIC_OAUTH_API_URL "https://$KEYCLOAK_DOMAIN/realms/myrealm/protocol/openid-connect/userinfo"
clever env set GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH "contains(roles[*], 'admin') &amp;&amp; 'Admin' || contains(roles[*], 'editor') &amp;&amp; 'Editor' || 'Viewer'"</code></pre>
<!-- /wp:html -->

<!-- wp:quote -->
<blockquote class="wp-block-quote"><p><strong>Note:</strong> In this section, you need to define GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET yourself, using the value in Keycloak UI, under Client &gt; $GRAFANA_URL &gt; Credentials</p></blockquote>
<!-- /wp:quote -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash">clever env set GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET &lt;KEYCLOAK_CLIENT_SECRET&gt;</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>You can now deploy Grafana:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="lang-bash"># Deploy grafana
clever deploy

# Open grafana and try the Login with Keycloak button !
clever open</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Now hit login with Keycloak, and use the username and password you defined for the user you created Earlier in Keycloak.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Using the same procedure describe earlier to create the first user, you can now create more users and roles. Create the roles "editor" and/or "viewer" and assign them to your new users within Keycloak. Try to connect with those on Grafana and you will see the roles are propagated to Grafana.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sources: </p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li><a href="https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/">https://janikvonrotz.ch/2020/08/27/grafana-oauth-with-keycloak-and-how-to-validate-a-jwt-token/</a></li><li><a href="https://www.keycloak.org/getting-started/getting-started-zip">https://www.keycloak.org/getting-started/getting-started-zip</a></li></ul>
<!-- /wp:list -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Improving our environment variables editor</title>
		<link>https://stagingv6.cleverapps.io/blog/engineering/2022/03/22/improving-our-environment-variables-editor/</link>
		
		<dc:creator><![CDATA[David Legrand]]></dc:creator>
		<pubDate>Tue, 22 Mar 2022 08:39:11 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=6011</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Environment variable" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>Over the last few months, we have started a major but gradual redesign of our web interface, <a href="https://console.clever-cloud.com/">the Console</a>. Under the leadership of Hubert Sablonnière, whose team is welcoming new developers, the modules are refined and managed in an increasing way through Web Components (see <a href="https://www.youtube.com/watch?v=iTAPPcNQ2Oo">this talk</a>).</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>An editor accepting JSON format</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The last change released is related to the environment variables management. Until now it was proposed with a Simple or Expert mode. We have added a third, using JSON format. You can read/write in it, and so export or paste a complete configuration:</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center"><a href="https://cdn.clever-cloud.com/uploads/2022/03/ust.webp" target="_blank" rel="noopener"><img class="wp-image-5968" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/ust.webp" alt="Clever Cloud Console Environment Variables Simple US"></a><a href="https://cdn.clever-cloud.com/uploads/2022/03/usj.webp" target="_blank" rel="noopener"><img class="wp-image-5969" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/usj.webp" alt="Clever Cloud Console Environment Variables JSON US"></a><br>The Simple editor (left) and the new JSON one (right)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first one displays environment variables as name/value fields, you can add or remove them depending on your needs. The other two uses editable fields, but with a text or JSON format, accordingly. When the content is modified, checks are run to inform you if there are any formatting or variable management errors.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>These checks are now more strict, with one exception: in some applications, such as those in the Java ecosystem, variables name may contain a dot. In this case, they will be injected as properties and not as environment variables. The rules are detailed <a href="https://stagingv6.cleverapps.io/doc/develop/env-variables/#environment-variables-rules-and-formats">here</a>. The reference of our environment variables is documented <a href="https://stagingv6.cleverapps.io/doc/develop/env-variables/">there</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>The Config Provider is now using a Web Component</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Please note that the new editor has been designed as a <a href="https://developer.mozilla.org/fr/docs/Web/Web_Components">Web Component</a>. It is thus reused to display the environment variables of add-ons and has just replaced the one used for the <a href="https://stagingv6.cleverapps.io/doc/deploy/addon/config-provider/">Config Provider</a> which was a simple multi-lines text editing field.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As a reminder, this add-on allows you to create a list of environment variables that can be shared by different applications. To use it, you just need to integrate the Config Provider as a service dependency in their settings.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center"><a href="https://cdn.clever-cloud.com/uploads/2022/03/addon-scaled.webp" target="_blank" rel="noreferrer noopener"><img class="wp-image-5970" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/addon-scaled.webp" alt="Clever Cloud Console Config Provider US"></a><a href="https://cdn.clever-cloud.com/uploads/2022/03/addonold-scaled.webp" target="_blank" rel="noreferrer noopener"><img class="wp-image-5971" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/addonold-scaled.webp" alt="Clever Cloud Console Old Config Provider US"></a><br>The Config Provider with the Web Component editor (left) vs the previous basic editor (right)</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Environment variable" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/env-var-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>Over the last few months, we have started a major but gradual redesign of our web interface, <a href="https://console.clever-cloud.com/">the Console</a>. Under the leadership of Hubert Sablonnière, whose team is welcoming new developers, the modules are refined and managed in an increasing way through Web Components (see <a href="https://www.youtube.com/watch?v=iTAPPcNQ2Oo">this talk</a>).</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>An editor accepting JSON format</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The last change released is related to the environment variables management. Until now it was proposed with a Simple or Expert mode. We have added a third, using JSON format. You can read/write in it, and so export or paste a complete configuration:</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center"><a href="https://cdn.clever-cloud.com/uploads/2022/03/ust.webp" target="_blank" rel="noopener"><img class="wp-image-5968" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/ust.webp" alt="Clever Cloud Console Environment Variables Simple US"></a><a href="https://cdn.clever-cloud.com/uploads/2022/03/usj.webp" target="_blank" rel="noopener"><img class="wp-image-5969" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/usj.webp" alt="Clever Cloud Console Environment Variables JSON US"></a><br>The Simple editor (left) and the new JSON one (right)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first one displays environment variables as name/value fields, you can add or remove them depending on your needs. The other two uses editable fields, but with a text or JSON format, accordingly. When the content is modified, checks are run to inform you if there are any formatting or variable management errors.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>These checks are now more strict, with one exception: in some applications, such as those in the Java ecosystem, variables name may contain a dot. In this case, they will be injected as properties and not as environment variables. The rules are detailed <a href="https://stagingv6.cleverapps.io/doc/develop/env-variables/#environment-variables-rules-and-formats">here</a>. The reference of our environment variables is documented <a href="https://stagingv6.cleverapps.io/doc/develop/env-variables/">there</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>The Config Provider is now using a Web Component</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Please note that the new editor has been designed as a <a href="https://developer.mozilla.org/fr/docs/Web/Web_Components">Web Component</a>. It is thus reused to display the environment variables of add-ons and has just replaced the one used for the <a href="https://stagingv6.cleverapps.io/doc/deploy/addon/config-provider/">Config Provider</a> which was a simple multi-lines text editing field.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As a reminder, this add-on allows you to create a list of environment variables that can be shared by different applications. To use it, you just need to integrate the Config Provider as a service dependency in their settings.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center"><a href="https://cdn.clever-cloud.com/uploads/2022/03/addon-scaled.webp" target="_blank" rel="noreferrer noopener"><img class="wp-image-5970" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/addon-scaled.webp" alt="Clever Cloud Console Config Provider US"></a><a href="https://cdn.clever-cloud.com/uploads/2022/03/addonold-scaled.webp" target="_blank" rel="noreferrer noopener"><img class="wp-image-5971" style="width: 500px;" src="https://cdn.clever-cloud.com/uploads/2022/03/addonold-scaled.webp" alt="Clever Cloud Console Old Config Provider US"></a><br>The Config Provider with the Web Component editor (left) vs the previous basic editor (right)</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>#65 &#8211; PG compresse la react-tion du framaverse</title>
		<link>https://stagingv6.cleverapps.io/podcast/65-pg-compresse-la-react-tion-du-framaverse/</link>
		
		<dc:creator><![CDATA[Hubert Sablonnière]]></dc:creator>
		<pubDate>Thu, 10 Mar 2022 08:40:51 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?post_type=podcast&#038;p=5831</guid>

					<description><![CDATA[<p><img width="1920" height="1080" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1.jpg 1920w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-300x169.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-1024x576.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-768x432.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-1536x864.jpg 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-1368x770.jpg 1368w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:gallery {"columns":4,"linkTo":"none"} -->
<figure class="wp-block-gallery has-nested-images columns-4 is-cropped"><!-- wp:image {"id":712,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2021/03/hubert-sablonniere.jpg" alt="hubert_sablonnière" class="wp-image-712"/><figcaption>Hubert Sablonnière</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"id":704,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
<figure class="wp-block-image size-large is-style-default"><img src="https://cdn.clever-cloud.com/uploads/2021/03/alexandre-duval-447x447.jpg" alt="alexandre_duval" class="wp-image-704"/><figcaption>Alexandre Duval</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"id":5002,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/01/T02QK4NGF-U02SG9465B4-449db2b4187d-512-413x447.jpeg" alt="" class="wp-image-5002"/><figcaption>Rémi Colignon</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"id":5836,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/03/image-1-447x447.png" alt="" class="wp-image-5836"/><figcaption>Frédéric Camblor</figcaption></figure>
<!-- /wp:image --></figure>
<!-- /wp:gallery -->

<!-- wp:paragraph -->
<p>Dans cet incroyable épisode, il est question de l'accord entre Elastic et Amazon, du nouveau site de MDN, de Mozilla et du WEB3, de JS, de compression Zstd avec PostgreSQL, de Java et de React 18, de la série à regarder JS idiomatique… Pour enfin finir en grande musique avec Pierre et le Loup, pour s'ukrainiser civilement le neurone symphonique.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"className":"is-style-fill"} -->
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link" href="https://youtu.be/1EolJsbDVuM" target="_blank" rel="noreferrer noopener">Regarder sur Youtube</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>👋  Venez discuter avec nous sur <strong>@clever_cloudFR</strong> pour nous dire ce que vous avez pensé de ce nouvel épisode.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>➡️  Pour découvrir ou réécouter d'anciens épisodes <a href="https://stagingv6.cleverapps.io/fr/podcast/">c'est par ici</a> !</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 id="timecodes-liens">Timecodes &amp; liens :</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>00:00:00 : Introduction et présentation de l’invité<br><a href="https://twitter.com/fcamblor&#10;">https://twitter.com/fcamblor<br></a><a href="https://www.bdxio.fr/" target="_blank" rel="noreferrer noopener">https://www.bdxio.fr/<br></a><a href="http://bordeauxjug.org/&#10;">http://bordeauxjug.org/<br></a><a href="https://vitemadose.covidtracker.fr/" target="_blank" rel="noreferrer noopener">https://vitemadose.covidtracker.fr/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:07:00 Elastic and Amazon Reach Agreement on Trademark Infringement Lawsuit<br><a href="https://www.elastic.co/blog/elastic-and-amazon-reach-agreement-on-trademark-infringement-lawsuit">https://www.elastic.co/blog/elastic-and-amazon-reach-agreement-on-trademark-infringement-lawsuit</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:09:44 : A new year, a new MDN<br><a href="https://hacks.mozilla.org/2022/03/a-new-year-a-new-mdn/&#10;">https://hacks.mozilla.org/2022/03/a-new-year-a-new-mdn/<br></a><a href="https://en.wikipedia.org/wiki/OpenSearch" target="_blank" rel="noreferrer noopener">https://en.wikipedia.org/wiki/OpenSearch</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:19:26 : Mozilla s’attaque au web3?<br><a href="https://hubs.mozilla.com/" target="_blank" rel="noreferrer noopener">https://hubs.mozilla.com/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:23:03 : Les résultats du State of JS 2021 (et début 2022 :)) sont sortis<br><a href="https://2021.stateofjs.com/en-US/" target="_blank" rel="noreferrer noopener">https://2021.stateofjs.com/en-US/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:34:17 : PostgreSQL Begins Working On Zstd Compression Support<br><a href="https://www.phoronix.com/scan.php?page=news_item&amp;px=PostgreSQL-ZStd-Start" target="_blank" rel="noreferrer noopener">https://www.phoronix.com/scan.php?page=news_item&amp;px=PostgreSQL-ZStd-Start</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:38:35 : Java 18 Final RC (GA prévue le 22/03)<br><a href="https://openjdk.java.net/projects/jdk/18/" target="_blank" rel="noreferrer noopener">https://openjdk.java.net/projects/jdk/18/<br></a><a href="https://www.loicmathieu.fr/wordpress/informatique/java-18-quoi-de-neuf/" target="_blank" rel="noreferrer noopener">https://www.loicmathieu.fr/wordpress/informatique/java-18-quoi-de-neuf/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:47:53<br>React 18 va-t-il apporter (enfin!) un support des custom elements ?<br><a href="https://twitter.com/dan_abramov/status/1483892375223414785" target="_blank" rel="noreferrer noopener">https://twitter.com/dan_abramov/status/1483892375223414785<br></a><a href="https://custom-elements-everywhere.com/" target="_blank" rel="noreferrer noopener">https://custom-elements-everywhere.com/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:54:44 : React Query v4 alpha, connection mode<br><a href="https://react-query.tanstack.com/" target="_blank" rel="noreferrer noopener">https://react-query.tanstack.com/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>01:03:50 : La série JS Idiomatique de Delicious Insights (Christophe Porteneuve) qui reprend les bases d’un certain nombre de features EcmaScript<br><a href="https://www.youtube.com/playlist?list=PLPoAfTkDs_Jad8tGdMkixD1r7lMjpRstB" target="_blank" rel="noreferrer noopener">https://www.youtube.com/playlist?list=PLPoAfTkDs_Jad8tGdMkixD1r7lMjpRstB</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>01:07:20 : Le Choix musical de Frédéric Camblor : Pierre &amp; le Loup (Sergueï Prokofiev)<br><a href="https://youtu.be/eN4Iyb8HKjM?t=596" target="_blank" rel="noreferrer noopener">https://youtu.be/eN4Iyb8HKjM?t=596</a></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1920" height="1080" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1.jpg 1920w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-300x169.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-1024x576.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-768x432.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-1536x864.jpg 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/03/65-1-1368x770.jpg 1368w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p><!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:gallery {"columns":4,"linkTo":"none"} -->
<figure class="wp-block-gallery has-nested-images columns-4 is-cropped"><!-- wp:image {"id":712,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2021/03/hubert-sablonniere.jpg" alt="hubert_sablonnière" class="wp-image-712"/><figcaption>Hubert Sablonnière</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"id":704,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
<figure class="wp-block-image size-large is-style-default"><img src="https://cdn.clever-cloud.com/uploads/2021/03/alexandre-duval-447x447.jpg" alt="alexandre_duval" class="wp-image-704"/><figcaption>Alexandre Duval</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"id":5002,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/01/T02QK4NGF-U02SG9465B4-449db2b4187d-512-413x447.jpeg" alt="" class="wp-image-5002"/><figcaption>Rémi Colignon</figcaption></figure>
<!-- /wp:image -->

<!-- wp:image {"id":5836,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/03/image-1-447x447.png" alt="" class="wp-image-5836"/><figcaption>Frédéric Camblor</figcaption></figure>
<!-- /wp:image --></figure>
<!-- /wp:gallery -->

<!-- wp:paragraph -->
<p>Dans cet incroyable épisode, il est question de l'accord entre Elastic et Amazon, du nouveau site de MDN, de Mozilla et du WEB3, de JS, de compression Zstd avec PostgreSQL, de Java et de React 18, de la série à regarder JS idiomatique… Pour enfin finir en grande musique avec Pierre et le Loup, pour s'ukrainiser civilement le neurone symphonique.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"className":"is-style-fill"} -->
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link" href="https://youtu.be/1EolJsbDVuM" target="_blank" rel="noreferrer noopener">Regarder sur Youtube</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>👋  Venez discuter avec nous sur <strong>@clever_cloudFR</strong> pour nous dire ce que vous avez pensé de ce nouvel épisode.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>➡️  Pour découvrir ou réécouter d'anciens épisodes <a href="https://stagingv6.cleverapps.io/fr/podcast/">c'est par ici</a> !</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 id="timecodes-liens">Timecodes &amp; liens :</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>00:00:00 : Introduction et présentation de l’invité<br><a href="https://twitter.com/fcamblor&#10;">https://twitter.com/fcamblor<br></a><a href="https://www.bdxio.fr/" target="_blank" rel="noreferrer noopener">https://www.bdxio.fr/<br></a><a href="http://bordeauxjug.org/&#10;">http://bordeauxjug.org/<br></a><a href="https://vitemadose.covidtracker.fr/" target="_blank" rel="noreferrer noopener">https://vitemadose.covidtracker.fr/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:07:00 Elastic and Amazon Reach Agreement on Trademark Infringement Lawsuit<br><a href="https://www.elastic.co/blog/elastic-and-amazon-reach-agreement-on-trademark-infringement-lawsuit">https://www.elastic.co/blog/elastic-and-amazon-reach-agreement-on-trademark-infringement-lawsuit</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:09:44 : A new year, a new MDN<br><a href="https://hacks.mozilla.org/2022/03/a-new-year-a-new-mdn/&#10;">https://hacks.mozilla.org/2022/03/a-new-year-a-new-mdn/<br></a><a href="https://en.wikipedia.org/wiki/OpenSearch" target="_blank" rel="noreferrer noopener">https://en.wikipedia.org/wiki/OpenSearch</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:19:26 : Mozilla s’attaque au web3?<br><a href="https://hubs.mozilla.com/" target="_blank" rel="noreferrer noopener">https://hubs.mozilla.com/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:23:03 : Les résultats du State of JS 2021 (et début 2022 :)) sont sortis<br><a href="https://2021.stateofjs.com/en-US/" target="_blank" rel="noreferrer noopener">https://2021.stateofjs.com/en-US/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:34:17 : PostgreSQL Begins Working On Zstd Compression Support<br><a href="https://www.phoronix.com/scan.php?page=news_item&amp;px=PostgreSQL-ZStd-Start" target="_blank" rel="noreferrer noopener">https://www.phoronix.com/scan.php?page=news_item&amp;px=PostgreSQL-ZStd-Start</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:38:35 : Java 18 Final RC (GA prévue le 22/03)<br><a href="https://openjdk.java.net/projects/jdk/18/" target="_blank" rel="noreferrer noopener">https://openjdk.java.net/projects/jdk/18/<br></a><a href="https://www.loicmathieu.fr/wordpress/informatique/java-18-quoi-de-neuf/" target="_blank" rel="noreferrer noopener">https://www.loicmathieu.fr/wordpress/informatique/java-18-quoi-de-neuf/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:47:53<br>React 18 va-t-il apporter (enfin!) un support des custom elements ?<br><a href="https://twitter.com/dan_abramov/status/1483892375223414785" target="_blank" rel="noreferrer noopener">https://twitter.com/dan_abramov/status/1483892375223414785<br></a><a href="https://custom-elements-everywhere.com/" target="_blank" rel="noreferrer noopener">https://custom-elements-everywhere.com/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>00:54:44 : React Query v4 alpha, connection mode<br><a href="https://react-query.tanstack.com/" target="_blank" rel="noreferrer noopener">https://react-query.tanstack.com/</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>01:03:50 : La série JS Idiomatique de Delicious Insights (Christophe Porteneuve) qui reprend les bases d’un certain nombre de features EcmaScript<br><a href="https://www.youtube.com/playlist?list=PLPoAfTkDs_Jad8tGdMkixD1r7lMjpRstB" target="_blank" rel="noreferrer noopener">https://www.youtube.com/playlist?list=PLPoAfTkDs_Jad8tGdMkixD1r7lMjpRstB</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>01:07:20 : Le Choix musical de Frédéric Camblor : Pierre &amp; le Loup (Sergueï Prokofiev)<br><a href="https://youtu.be/eN4Iyb8HKjM?t=596" target="_blank" rel="noreferrer noopener">https://youtu.be/eN4Iyb8HKjM?t=596</a></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		<enclosure url="https://assets.clever-cloud.com/podcast/fr/Message_a_caractere_informatique_65.mp3" length="100221918" type="audio/mpeg" />

			</item>
		<item>
		<title>Managing site traffic for a TV show, but in 24 hours</title>
		<link>https://stagingv6.cleverapps.io/blog/company/2022/01/20/managing-site-traffic-for-a-tv-show-but-in-24-hours/</link>
		
		<dc:creator><![CDATA[Clément Nivolle]]></dc:creator>
		<pubDate>Thu, 20 Jan 2022 11:14:30 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[customer testimonial]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=5162</guid>

					<description><![CDATA[<p><img width="1920" height="796" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="handling traffic surge, lessons from Aragorn" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573.jpg 1920w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-300x124.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-1024x425.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-768x318.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-1536x637.jpg 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-1368x567.jpg 1368w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p><!-- wp:paragraph -->
<p>Surprise as it often happens: the report that was made on your company two months ago is going to be programmed tomorrow evening. Or, in the middle of a hot topic, your product is going to be the subject of an item during the 8 o'clock news.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The TV appearance is always a bad match for the web: because when you size your IT infrastructure, it's more to manage your growth over 3 years. On a nice upward curve, usually linear. And when the traffic peaks by 800%, your architecture will be on its knees.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Except with Clever Cloud. Configuring your applications to absorb a traffic spike can be done with a few clicks in the interface:<br></p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":5164,"sizeSlug":"large","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/01/Screenshot-2022-01-20-at-10.55.06-627x447.png" alt="" class="wp-image-5164" title="managing scaling"/><figcaption>Managing site traffic</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Only, managing site traffic is easy when you are already hosted by Clever Cloud. But if this is not the case, there is no fatality.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Yesterday, M6 broadcast the show "Who wants to be my partner? And the young company <a href="https://www.biodemain.fr/" target="_blank" rel="noreferrer noopener">BioDemain</a>, which helps agricultural producers during the three years of their organic transition, took part. Hosted on a traditional architecture, the risk of the service falling down is great. So we helped <a href="https://www.biodemain.fr/" target="_blank" rel="noreferrer noopener">BioDemain</a> migrate their site to Clever Cloud in less than 24 hours!</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 id="how-clever-cloud-handles-these-traffic-spikes">How Clever Cloud handles these traffic spikes</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>First of all, managing site traffic will be done on the Clever Cloud side by load-balancers before reaching your application. These load-balancers (formerly HAProxy instances, and now instances of Sōzu, an in-house software) are going to distribute the traffic among themselves. Just like if you had Amazon ELBs (<em>Elastic Load Balancer</em>), except that here it's included by default, and already configured.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Your application will then receive the traffic. Depending on your <em>scaling</em> configuration, your application will be able to trigger alerts to our monitoring system if CPU and RAM increase. And therefore multiply the number of instances. Load-balancers and multiple instances in a few seconds: and you are ready to handle the traffic.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":5168,"sizeSlug":"large","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/01/les-VM-667x372.png" alt="" class="wp-image-5168"/><figcaption>The author of this article had a hard time to put up this architecture in picture</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 id="the-migration-itself">The migration itself</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To move to Clever Cloud so quickly, we were put in touch with the BioDemain team. And it was the formidable support organisation that was at their side to migrate their site (here a Wordpress) from a shared solution to Clever Cloud. Despite a rather… tight schedule.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":5166,"sizeSlug":"medium","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-medium"><img src="https://cdn.clever-cloud.com/uploads/2022/01/team-realising-318x155.png" alt="" class="wp-image-5166"/><figcaption>Our team noticing they're on a tigh schedule</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>The recipe for success was a very quick migration. Indeed, there are two ways to deploy your Wordpress on Clever Cloud:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Quickly, with a simple FTP transfer.</li><li>More elegantly, using git for the code, Cellar for the media and Composer for the plug-ins.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Obviously we went for the first solution.<br>After contacting the developer of <a href="https://www.biodemain.fr/" target="_blank" rel="noreferrer noopener">BioDemain</a>, the first step was to transfer the files between the old host and Clever.<br>Several tens of thousands of files, so in FTP it takes time.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>While waiting for the end of the file transfer, our team and BioDemain were able to deploy two other instances: MySQL and Redis. Then came the configuration of the PHP application itself (still during the transfer).<br>Here we had to:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Activate ProxySQL <a href="https://stagingv6.cleverapps.io/doc/deploy/addon/mysql/proxysql/" target="_blank" rel="noreferrer noopener">to mutualize the application connections</a></li><li>Configure proxySQL via simple environment variables:<ul><li><code>CC_ENABLE_MYSQL_PROXYSQL=true</code> for activation</li><li><code>CC_MYSQL_PROXYSQL_MAX_CONNECTIONS =15</code> to set the maximum number of connections to be managed</li><li><code>CC_MYSQL_PROXYSQL_USE_TLS=true</code> if needed</li></ul></li><li>Make a dump of the original MySQL database and import this dump into the new one</li><li>Enable the <a href="https://stagingv6.cleverapps.io/doc/getting-started/by-language/php/#use-redis-to-store-php-sessions" target="_blank" rel="noreferrer noopener">Redis session in PHP via environment variable</a>].</li></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 id="extra-tech-tips">Extra tech tips</h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul><li>You can also <a href="https://stagingv6.cleverapps.io/doc/administrate/cache/" target="_blank" rel="noreferrer noopener">enable the Varnish built into Clever Cloud</a> if you feel like it:</li><li>Put in a CDN: if you don't have time to optimize your SQL queries, caching strategies, <em>minifications</em> etc., CDNs are there to offload some of the traffic to them.</li><li>Before anything else, lower the TTL of your CNAME and A records of your domain name. At the time of migration, if you are short of time and the changes to the domain name are propagated over 24 hours, you will find it a shame.</li><li>And if you ever have a down, redirect your home page to an application that displays a contact form: users can then leave an email to be contacted again.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Finally, evaluate the performance. The fateful moment of the TV pass does not suffer from a single oversight. To do this: JMeter locally (beware, it requires resources), or great online services like <a href="https://gatling.io." target="_blank" rel="noreferrer noopener">gatling.io</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You have all the cards in hand for the next step :) Good luck!</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1920" height="796" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="handling traffic surge, lessons from Aragorn" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573.jpg 1920w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-300x124.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-1024x425.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-768x318.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-1536x637.jpg 1536w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2022/01/lotr3moviescreencaps-com24573-1368x567.jpg 1368w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p><!-- wp:paragraph -->
<p>Surprise as it often happens: the report that was made on your company two months ago is going to be programmed tomorrow evening. Or, in the middle of a hot topic, your product is going to be the subject of an item during the 8 o'clock news.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The TV appearance is always a bad match for the web: because when you size your IT infrastructure, it's more to manage your growth over 3 years. On a nice upward curve, usually linear. And when the traffic peaks by 800%, your architecture will be on its knees.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Except with Clever Cloud. Configuring your applications to absorb a traffic spike can be done with a few clicks in the interface:<br></p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":5164,"sizeSlug":"large","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/01/Screenshot-2022-01-20-at-10.55.06-627x447.png" alt="" class="wp-image-5164" title="managing scaling"/><figcaption>Managing site traffic</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Only, managing site traffic is easy when you are already hosted by Clever Cloud. But if this is not the case, there is no fatality.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Yesterday, M6 broadcast the show "Who wants to be my partner? And the young company <a href="https://www.biodemain.fr/" target="_blank" rel="noreferrer noopener">BioDemain</a>, which helps agricultural producers during the three years of their organic transition, took part. Hosted on a traditional architecture, the risk of the service falling down is great. So we helped <a href="https://www.biodemain.fr/" target="_blank" rel="noreferrer noopener">BioDemain</a> migrate their site to Clever Cloud in less than 24 hours!</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 id="how-clever-cloud-handles-these-traffic-spikes">How Clever Cloud handles these traffic spikes</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>First of all, managing site traffic will be done on the Clever Cloud side by load-balancers before reaching your application. These load-balancers (formerly HAProxy instances, and now instances of Sōzu, an in-house software) are going to distribute the traffic among themselves. Just like if you had Amazon ELBs (<em>Elastic Load Balancer</em>), except that here it's included by default, and already configured.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Your application will then receive the traffic. Depending on your <em>scaling</em> configuration, your application will be able to trigger alerts to our monitoring system if CPU and RAM increase. And therefore multiply the number of instances. Load-balancers and multiple instances in a few seconds: and you are ready to handle the traffic.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":5168,"sizeSlug":"large","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://cdn.clever-cloud.com/uploads/2022/01/les-VM-667x372.png" alt="" class="wp-image-5168"/><figcaption>The author of this article had a hard time to put up this architecture in picture</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:heading -->
<h2 id="the-migration-itself">The migration itself</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To move to Clever Cloud so quickly, we were put in touch with the BioDemain team. And it was the formidable support organisation that was at their side to migrate their site (here a Wordpress) from a shared solution to Clever Cloud. Despite a rather… tight schedule.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":5166,"sizeSlug":"medium","linkDestination":"none"} -->
<div class="wp-block-image"><figure class="aligncenter size-medium"><img src="https://cdn.clever-cloud.com/uploads/2022/01/team-realising-318x155.png" alt="" class="wp-image-5166"/><figcaption>Our team noticing they're on a tigh schedule</figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>The recipe for success was a very quick migration. Indeed, there are two ways to deploy your Wordpress on Clever Cloud:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Quickly, with a simple FTP transfer.</li><li>More elegantly, using git for the code, Cellar for the media and Composer for the plug-ins.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Obviously we went for the first solution.<br>After contacting the developer of <a href="https://www.biodemain.fr/" target="_blank" rel="noreferrer noopener">BioDemain</a>, the first step was to transfer the files between the old host and Clever.<br>Several tens of thousands of files, so in FTP it takes time.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>While waiting for the end of the file transfer, our team and BioDemain were able to deploy two other instances: MySQL and Redis. Then came the configuration of the PHP application itself (still during the transfer).<br>Here we had to:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Activate ProxySQL <a href="https://stagingv6.cleverapps.io/doc/deploy/addon/mysql/proxysql/" target="_blank" rel="noreferrer noopener">to mutualize the application connections</a></li><li>Configure proxySQL via simple environment variables:<ul><li><code>CC_ENABLE_MYSQL_PROXYSQL=true</code> for activation</li><li><code>CC_MYSQL_PROXYSQL_MAX_CONNECTIONS =15</code> to set the maximum number of connections to be managed</li><li><code>CC_MYSQL_PROXYSQL_USE_TLS=true</code> if needed</li></ul></li><li>Make a dump of the original MySQL database and import this dump into the new one</li><li>Enable the <a href="https://stagingv6.cleverapps.io/doc/getting-started/by-language/php/#use-redis-to-store-php-sessions" target="_blank" rel="noreferrer noopener">Redis session in PHP via environment variable</a>].</li></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 id="extra-tech-tips">Extra tech tips</h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul><li>You can also <a href="https://stagingv6.cleverapps.io/doc/administrate/cache/" target="_blank" rel="noreferrer noopener">enable the Varnish built into Clever Cloud</a> if you feel like it:</li><li>Put in a CDN: if you don't have time to optimize your SQL queries, caching strategies, <em>minifications</em> etc., CDNs are there to offload some of the traffic to them.</li><li>Before anything else, lower the TTL of your CNAME and A records of your domain name. At the time of migration, if you are short of time and the changes to the domain name are propagated over 24 hours, you will find it a shame.</li><li>And if you ever have a down, redirect your home page to an application that displays a contact form: users can then leave an email to be contacted again.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Finally, evaluate the performance. The fateful moment of the TV pass does not suffer from a single oversight. To do this: JMeter locally (beware, it requires resources), or great online services like <a href="https://gatling.io." target="_blank" rel="noreferrer noopener">gatling.io</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You have all the cards in hand for the next step :) Good luck!</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Slack alerts for Grafana</title>
		<link>https://stagingv6.cleverapps.io/blog/features/2021/12/03/slack-alerts-for-grafana/</link>
		
		<dc:creator><![CDATA[Aurélien Hebert]]></dc:creator>
		<pubDate>Fri, 03 Dec 2021 13:29:40 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=4167</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="slacka_alerts_for_grafana" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>In one of our previous posts, we announced the <a href="https://stagingv6.cleverapps.io/blog/features/2021/10/28/a-grafana-to-plot-applications-metrics/">release of a dedicated Clever Cloud Grafana</a> for all <a href="https://stagingv6.cleverapps.io/doc/administrate/metrics/overview/#publish-your-own-metrics">our metrics.</a> What if now, you want to receive an <strong>alert</strong> when an application is in an <strong>abnormal</strong> state? Grafana provides an alerting service that is compatible with our Warp10 backend. Let’s see how we can create Slack alerts with our or any Grafana with a <code>PromQL</code> data source. </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Grafana Notifier</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>First, before creating any alerts, we need to configure a Grafana notifier. You can have a full list of supported Grafana notifier <a href="https://grafana.com/docs/grafana/latest/alerting/old-alerting/notifications/#list-of-supported-notifiers">here</a>. However, you won't be able to configure notifiers that require an admin access, like email or SMTP. In this example, we will configure a slack channel to receive all Grafana alerts.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Configure Slack</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To be able to receive alerts on Slack, Grafana will ask for a web hook. The process to create one with slack is <a href="https://api.slack.com/messaging/webhooks">here</a>. At the end you should obtain an active incoming web hook.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4169,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/webHookSlack.png" alt="Slack incoming webhook" class="wp-image-4169"/><figcaption>Slack incoming webhook</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Simply copy the web hook URL and then go to the alerting main panel (bell on the left) and add a new <strong>slack</strong> <code>notification channel</code>. Configure it as done below, within the field <code>web hook URL</code>, the one from the slack application. You can set your own custom name.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4168,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Slack_notifier.png" alt="Add a slack notification channel" class="wp-image-4168"/><figcaption>Add a Slack notification channel</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Before you validate, you can test your slack integration with the <code>Test</code> button. Without delay, in the configure slack channel, you will receive a test message.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4170,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Test_Slack_Message.png" alt="Slack notification test message" class="wp-image-4170"/><figcaption>Slack notification test message</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2>Grafana Alerting</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Now that we have enabled an alert notifier, let’s create an alert in Grafana. </p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Clever Cloud Available Metrics </h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We will start from one of the template dashboards we release with Grafana. We deployed a preview application on a Clever Cloud organisation.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4171,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Application.png" alt="Custom application Clever Cloud dashboard" class="wp-image-4171"/><figcaption>Custom application Clever Cloud dashboard</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>For the rest of this post, we will work on the <code>load average</code> metrics. As we can see below, it’s a simple PromQL query. However, it includes custom dashboard variables&nbsp;<code>APP_ID</code> and <code>DEPLOY_ID</code> that <strong>are not supported in Grafana alerting</strong>!</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4172,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Dashboard.png" alt="Runtime load graph" class="wp-image-4172"/><figcaption>Runtime load graph</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Before enabling the alerting,  we will keep somewhere this graph query <code>system.load1_per_cpu{app_id="APP_ID"}</code>. I will only replace the variable <code>APP_ID</code> by its value, which is available on top of the dashboard. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4173,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Runtime_ID.png" alt="Runtime ID" class="wp-image-4173"/><figcaption>Runtime ID</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Then in order not to have our custom alerts removed at each update of the Clever Cloud dashboard templates, create a new dashboard.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4174,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Create-ne-Dashboard.png" alt="Create new dashboard" class="wp-image-4174"/><figcaption>Create new dashboard</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Also save it in a dedicated dashboard which is not <code>Clever Cloud</code>, in our example, it’s <code>alerting</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4175,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/SaveDashboard.png" alt="Save new dashboard" class="wp-image-4175"/><figcaption>Save new dashboard</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Finally, in this new dashboard create the same load graph with the query <code>system.load1_per_cpu{app_id="APP_ID"}</code>. As well as seen previously replace APP_ID by your own application ID. For the data source, select the <code>PromQL</code> one.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4176,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/TestAlertDashQuery.png" alt="Load application alert Graph" class="wp-image-4176"/><figcaption>Load application alert Graph</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3>Set Up The Alerting</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>At this instant we have a new graph where we can set up a first alert on the load of our application. For that, go on the <code>Alert</code> panel, and configure the alert based on the parameter you want. Quickly, to get an alert working, I set up the condition to check if my metrics <strong>are below</strong> the value&nbsp;<code>0.2</code>. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4177,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/CreateFirstAlert.png" alt="Alert conditions section" class="wp-image-4177"/><figcaption>Alert conditions section</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Then still on the <code>Alert</code> panel add the notifier you created in the first section. Here, you can customise the alert you will receive in slack: adding a message and custom tags.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4179,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/NotificationGrafana.png" alt="Alert notifier section" class="wp-image-4179"/><figcaption>Alert notifier section</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Once you have set up your alert, you can test the rule with the <code>test rule</code> button.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4178,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/TestingAlertRule.png" alt="Test rule result" class="wp-image-4178"/><figcaption>Test rule result</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Next all you have to do is to wait for an alert to appear on Slack! Besides each alert state change will be ploted on the alert graph. After about five minutes, as I was clearly matching my alert state condition, I got two states change: one pending and one alerting. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4180,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/FirstAlertV2.png" alt="Alert states" class="wp-image-4180"/><figcaption>Alert states</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>As soon as the alert state happens, a slack message is sent through the notifier. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4181,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/AlertInSlack.png" alt="Slack alert test message" class="wp-image-4181"/><figcaption>Slack alert test message</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Finally, I would like to retrieve a more ‘normal’ state. To do it, I update my alert condition and set it to<strong> above</strong> <code>0.8</code>, which is a more classical value for an alert threshold for the load metrics. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4182,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/ChangeRuleAlert.png" alt="Alert condition above 0.8" class="wp-image-4182"/><figcaption>Alert condition above 0.8</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Instantly or almost, the state of the alert should change and comes <strong>OK</strong>!</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4183,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/AlertOk.png" alt="Alert state is OK" class="wp-image-4183"/><figcaption>Alert state is OK</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Immediately after Grafana also send a message to slack to end the issue!</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4184,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/AlertOkSlack.png" alt="Alert OK" class="wp-image-4184"/><figcaption>Alert ok</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2>To Sum Up</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>You should now be able to configure your own alerts on Slack for Grafana! You can play with the pending time, the alert condition, when to trigger the alert, the alert message the tags and so on. In fact, all you need is a working <code>PromQL</code> query. Nonetheless remember that the Grafana alerting doesn’t support dashboard variables. Other than that, you should be able to custom the alert as you wish! </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>I hope you enjoy and feel free to share with us your thought on the Alerting and the Metrics product. We will be happy to have your feedback. You can contact me directly on twitter, or send us a message through the <a href="https://stagingv6.cleverapps.io/doc/administrate/metrics/overview/#comments">metrics overview comments</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="slacka_alerts_for_grafana" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2.png 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-300x116.png 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-1024x395.png 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-768x296.png 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/12/slack-alerts-for-grafana-2-1368x528.png 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><!-- wp:paragraph -->
<p>In one of our previous posts, we announced the <a href="https://stagingv6.cleverapps.io/blog/features/2021/10/28/a-grafana-to-plot-applications-metrics/">release of a dedicated Clever Cloud Grafana</a> for all <a href="https://stagingv6.cleverapps.io/doc/administrate/metrics/overview/#publish-your-own-metrics">our metrics.</a> What if now, you want to receive an <strong>alert</strong> when an application is in an <strong>abnormal</strong> state? Grafana provides an alerting service that is compatible with our Warp10 backend. Let’s see how we can create Slack alerts with our or any Grafana with a <code>PromQL</code> data source. </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Grafana Notifier</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>First, before creating any alerts, we need to configure a Grafana notifier. You can have a full list of supported Grafana notifier <a href="https://grafana.com/docs/grafana/latest/alerting/old-alerting/notifications/#list-of-supported-notifiers">here</a>. However, you won't be able to configure notifiers that require an admin access, like email or SMTP. In this example, we will configure a slack channel to receive all Grafana alerts.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Configure Slack</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>To be able to receive alerts on Slack, Grafana will ask for a web hook. The process to create one with slack is <a href="https://api.slack.com/messaging/webhooks">here</a>. At the end you should obtain an active incoming web hook.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4169,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/webHookSlack.png" alt="Slack incoming webhook" class="wp-image-4169"/><figcaption>Slack incoming webhook</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Simply copy the web hook URL and then go to the alerting main panel (bell on the left) and add a new <strong>slack</strong> <code>notification channel</code>. Configure it as done below, within the field <code>web hook URL</code>, the one from the slack application. You can set your own custom name.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4168,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Slack_notifier.png" alt="Add a slack notification channel" class="wp-image-4168"/><figcaption>Add a Slack notification channel</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Before you validate, you can test your slack integration with the <code>Test</code> button. Without delay, in the configure slack channel, you will receive a test message.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4170,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Test_Slack_Message.png" alt="Slack notification test message" class="wp-image-4170"/><figcaption>Slack notification test message</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2>Grafana Alerting</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Now that we have enabled an alert notifier, let’s create an alert in Grafana. </p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>Clever Cloud Available Metrics </h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We will start from one of the template dashboards we release with Grafana. We deployed a preview application on a Clever Cloud organisation.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4171,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Application.png" alt="Custom application Clever Cloud dashboard" class="wp-image-4171"/><figcaption>Custom application Clever Cloud dashboard</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>For the rest of this post, we will work on the <code>load average</code> metrics. As we can see below, it’s a simple PromQL query. However, it includes custom dashboard variables&nbsp;<code>APP_ID</code> and <code>DEPLOY_ID</code> that <strong>are not supported in Grafana alerting</strong>!</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4172,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Dashboard.png" alt="Runtime load graph" class="wp-image-4172"/><figcaption>Runtime load graph</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Before enabling the alerting,  we will keep somewhere this graph query <code>system.load1_per_cpu{app_id="APP_ID"}</code>. I will only replace the variable <code>APP_ID</code> by its value, which is available on top of the dashboard. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4173,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Runtime_ID.png" alt="Runtime ID" class="wp-image-4173"/><figcaption>Runtime ID</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Then in order not to have our custom alerts removed at each update of the Clever Cloud dashboard templates, create a new dashboard.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4174,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/Create-ne-Dashboard.png" alt="Create new dashboard" class="wp-image-4174"/><figcaption>Create new dashboard</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Also save it in a dedicated dashboard which is not <code>Clever Cloud</code>, in our example, it’s <code>alerting</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4175,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/SaveDashboard.png" alt="Save new dashboard" class="wp-image-4175"/><figcaption>Save new dashboard</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Finally, in this new dashboard create the same load graph with the query <code>system.load1_per_cpu{app_id="APP_ID"}</code>. As well as seen previously replace APP_ID by your own application ID. For the data source, select the <code>PromQL</code> one.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4176,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/TestAlertDashQuery.png" alt="Load application alert Graph" class="wp-image-4176"/><figcaption>Load application alert Graph</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3>Set Up The Alerting</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>At this instant we have a new graph where we can set up a first alert on the load of our application. For that, go on the <code>Alert</code> panel, and configure the alert based on the parameter you want. Quickly, to get an alert working, I set up the condition to check if my metrics <strong>are below</strong> the value&nbsp;<code>0.2</code>. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4177,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/CreateFirstAlert.png" alt="Alert conditions section" class="wp-image-4177"/><figcaption>Alert conditions section</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Then still on the <code>Alert</code> panel add the notifier you created in the first section. Here, you can customise the alert you will receive in slack: adding a message and custom tags.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4179,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/NotificationGrafana.png" alt="Alert notifier section" class="wp-image-4179"/><figcaption>Alert notifier section</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Once you have set up your alert, you can test the rule with the <code>test rule</code> button.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4178,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/TestingAlertRule.png" alt="Test rule result" class="wp-image-4178"/><figcaption>Test rule result</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Next all you have to do is to wait for an alert to appear on Slack! Besides each alert state change will be ploted on the alert graph. After about five minutes, as I was clearly matching my alert state condition, I got two states change: one pending and one alerting. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4180,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/FirstAlertV2.png" alt="Alert states" class="wp-image-4180"/><figcaption>Alert states</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>As soon as the alert state happens, a slack message is sent through the notifier. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4181,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/AlertInSlack.png" alt="Slack alert test message" class="wp-image-4181"/><figcaption>Slack alert test message</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Finally, I would like to retrieve a more ‘normal’ state. To do it, I update my alert condition and set it to<strong> above</strong> <code>0.8</code>, which is a more classical value for an alert threshold for the load metrics. </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4182,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/ChangeRuleAlert.png" alt="Alert condition above 0.8" class="wp-image-4182"/><figcaption>Alert condition above 0.8</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Instantly or almost, the state of the alert should change and comes <strong>OK</strong>!</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4183,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/AlertOk.png" alt="Alert state is OK" class="wp-image-4183"/><figcaption>Alert state is OK</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>Immediately after Grafana also send a message to slack to end the issue!</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":4184,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cdn.clever-cloud.com/uploads/2021/11/AlertOkSlack.png" alt="Alert OK" class="wp-image-4184"/><figcaption>Alert ok</figcaption></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2>To Sum Up</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>You should now be able to configure your own alerts on Slack for Grafana! You can play with the pending time, the alert condition, when to trigger the alert, the alert message the tags and so on. In fact, all you need is a working <code>PromQL</code> query. Nonetheless remember that the Grafana alerting doesn’t support dashboard variables. Other than that, you should be able to custom the alert as you wish! </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>I hope you enjoy and feel free to share with us your thought on the Alerting and the Metrics product. We will be happy to have your feedback. You can contact me directly on twitter, or send us a message through the <a href="https://stagingv6.cleverapps.io/doc/administrate/metrics/overview/#comments">metrics overview comments</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Announcing Time Series on Clever Cloud, with TARDIS</title>
		<link>https://stagingv6.cleverapps.io/blog/features/2021/10/19/announcing-time-series-on-clever-cloud-with-tardis/</link>
		
		<dc:creator><![CDATA[Clément Nivolle]]></dc:creator>
		<pubDate>Tue, 19 Oct 2021 15:14:57 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://stagingv6.cleverapps.io/?p=3723</guid>

					<description><![CDATA[<p><img width="1412" height="550" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="TARDIS banner" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis.webp 1412w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-300x117.webp 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-1024x399.webp 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-768x299.webp 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-1368x533.webp 1368w" sizes="auto, (max-width: 1412px) 100vw, 1412px" /></p><!-- wp:paragraph -->
<p>At Clever Cloud we aim to provide the best services for all kinds of data. Time Series data are no exception to this. We're thrilled to announce a time series database, TARDIS, in the next few weeks.</p>
<!-- /wp:paragraph -->


<p><span id="more-3723"></span></p>


<!-- wp:heading -->
<h2 class="wp-block-heading">About TARDIS Features</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A Time Series Database (TSDB) store series of chronological data, in an optimised way. The use cases are numerous:</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol><!-- wp:list-item -->
<li><strong><strong>Time Series</strong></strong> and <strong>Signal processing</strong> : TARDIS will be able to store your metrics and states. It will also offer an interactive and analytical queryable store&nbsp;to monitor changes over time.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>BI &amp; Analytics</strong> : You can use TARDIS as an analytical solution for Time Series. It will power Time Series analytical queries as well as dashboards. We are planning 3rd party integration too.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Monitoring</strong>: TARDIS will help you to integrate KPIs from a specialised service.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Technology &amp; Supported Protocols</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><p>This TSDB will be backed by our partner&nbsp;<a href="https://senx.io">SenX</a>, the company behind <a href="https://www.warp10.io">Warp10</a>, on a distributed infrastructure backed by OVHcloud.</p>
<p>One of the most interesting news about TARDIS is its ability to be a polyglot TSDB and to support multiple query languages and protocols. For instance, you can push your data with <strong>Prometheus</strong>, and you can retrieve it with <strong>WarpScript</strong> or <strong>PromQL</strong>. It’s the same data, without duplication.</p>
<p>The architecture uses proxies (hosted and managed by Clever Cloud) that bridges the gap between Warp10 and various requests protocols, <a href="https://stagingv6.cleverapps.io/blog/engineering/2021/10/12/enabling-promql-queries-with-erlenmeyer/">similar to our metrics backend</a>.</p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Reliability FTW</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS stores data in a <strong>strongly consistent fashion</strong>, thanks to a transactional pipeline. So, we won’t lose any data once a push is acknowledged.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} /-->

<!-- wp:paragraph -->
<p>Regarding <strong>high availability</strong>, we operate a special care for the storage too. Namely, rack awareness optimisations, network topology fault isolation and data placements.</p>
<p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
</p>
<p>We’ve designed everything in TARDIS for very <strong>high scalability</strong>. We clocked this technology with production workloads with millions data points per second, and over a billion unique series for a single region.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Pay as You Go</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS only bills for what users use. It start at 5 millions points (perfect for an app that produce 100 data points every minute, during a month). We will release the final pricing within the next few days. We will propose a beta program at a relatively low price first. Then the stabilised product pricing will change a bit, still at a competitive level (as always!).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} /-->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Integrated Authentication</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS will be integrated with Clever Cloud IAM, as it is with our <a href="https://stagingv6.cleverapps.io/pulsar/" target="_blank" rel="noreferrer noopener">Apache Pulsar</a> and <a href="https://stagingv6.cleverapps.io/product/elasticsearch/">Elasticsearch</a> services. In the meantime, we provide crypto tokens that let users define read or write access, to their entire data set or subscope to specific labels.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} /-->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Deletion &amp; GDPR</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS complies with GDPR by allowing customers to delete their data. Deletes can occur on a single data point, a whole series, or a set of series, over a specified time range. Which is particularly useful nowadays. To learn more about this, <a href="https://www.warp10.io/content/03_Documentation/03_Interacting_with_Warp_10/07_Deleting_data">check the documentation</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Release date and beta program</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We're planning &nbsp;the public release by the end of the 2021. But we can provide the service in advance as of today. You can reach us via the following form :</p>
<!-- /wp:paragraph -->

<div class="pipedriveWebForms" style="text-align: center; margin-top: 30px; border-top: 1px dashed rgba(128, 128, 128, 0.19); padding-top: 30px; background: white;" data-pd-webforms="https://webforms.pipedrive.com/f/b60P2dDA4iifApGMR8Gx8OHrTeA7LgxP9njD1xy8HSsPc7lib49tWV5AU8wkJZ"><script src="https://webforms.pipedrive.com/f/loader"></script></div>]]></description>
										<content:encoded><![CDATA[<p><img width="1412" height="550" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis.webp" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="TARDIS banner" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis.webp 1412w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-300x117.webp 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-1024x399.webp 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-768x299.webp 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/10/tardis-1368x533.webp 1368w" sizes="auto, (max-width: 1412px) 100vw, 1412px" /></p><!-- wp:paragraph -->
<p>At Clever Cloud we aim to provide the best services for all kinds of data. Time Series data are no exception to this. We're thrilled to announce a time series database, TARDIS, in the next few weeks.</p>
<!-- /wp:paragraph -->


<p><span id="more-3723"></span></p>


<!-- wp:heading -->
<h2 class="wp-block-heading">About TARDIS Features</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>A Time Series Database (TSDB) store series of chronological data, in an optimised way. The use cases are numerous:</p>
<!-- /wp:paragraph -->

<!-- wp:list {"ordered":true} -->
<ol><!-- wp:list-item -->
<li><strong><strong>Time Series</strong></strong> and <strong>Signal processing</strong> : TARDIS will be able to store your metrics and states. It will also offer an interactive and analytical queryable store&nbsp;to monitor changes over time.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>BI &amp; Analytics</strong> : You can use TARDIS as an analytical solution for Time Series. It will power Time Series analytical queries as well as dashboards. We are planning 3rd party integration too.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Monitoring</strong>: TARDIS will help you to integrate KPIs from a specialised service.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Technology &amp; Supported Protocols</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><p>This TSDB will be backed by our partner&nbsp;<a href="https://senx.io">SenX</a>, the company behind <a href="https://www.warp10.io">Warp10</a>, on a distributed infrastructure backed by OVHcloud.</p>
<p>One of the most interesting news about TARDIS is its ability to be a polyglot TSDB and to support multiple query languages and protocols. For instance, you can push your data with <strong>Prometheus</strong>, and you can retrieve it with <strong>WarpScript</strong> or <strong>PromQL</strong>. It’s the same data, without duplication.</p>
<p>The architecture uses proxies (hosted and managed by Clever Cloud) that bridges the gap between Warp10 and various requests protocols, <a href="https://stagingv6.cleverapps.io/blog/engineering/2021/10/12/enabling-promql-queries-with-erlenmeyer/">similar to our metrics backend</a>.</p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Reliability FTW</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS stores data in a <strong>strongly consistent fashion</strong>, thanks to a transactional pipeline. So, we won’t lose any data once a push is acknowledged.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} /-->

<!-- wp:paragraph -->
<p>Regarding <strong>high availability</strong>, we operate a special care for the storage too. Namely, rack awareness optimisations, network topology fault isolation and data placements.</p>
<p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
</p>
<p>We’ve designed everything in TARDIS for very <strong>high scalability</strong>. We clocked this technology with production workloads with millions data points per second, and over a billion unique series for a single region.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Pay as You Go</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS only bills for what users use. It start at 5 millions points (perfect for an app that produce 100 data points every minute, during a month). We will release the final pricing within the next few days. We will propose a beta program at a relatively low price first. Then the stabilised product pricing will change a bit, still at a competitive level (as always!).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} /-->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Integrated Authentication</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS will be integrated with Clever Cloud IAM, as it is with our <a href="https://stagingv6.cleverapps.io/pulsar/" target="_blank" rel="noreferrer noopener">Apache Pulsar</a> and <a href="https://stagingv6.cleverapps.io/product/elasticsearch/">Elasticsearch</a> services. In the meantime, we provide crypto tokens that let users define read or write access, to their entire data set or subscope to specific labels.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} /-->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Deletion &amp; GDPR</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>TARDIS complies with GDPR by allowing customers to delete their data. Deletes can occur on a single data point, a whole series, or a set of series, over a specified time range. Which is particularly useful nowadays. To learn more about this, <a href="https://www.warp10.io/content/03_Documentation/03_Interacting_with_Warp_10/07_Deleting_data">check the documentation</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Release date and beta program</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>We're planning &nbsp;the public release by the end of the 2021. But we can provide the service in advance as of today. You can reach us via the following form :</p>
<!-- /wp:paragraph -->

<div class="pipedriveWebForms" style="text-align: center; margin-top: 30px; border-top: 1px dashed rgba(128, 128, 128, 0.19); padding-top: 30px; background: white;" data-pd-webforms="https://webforms.pipedrive.com/f/b60P2dDA4iifApGMR8Gx8OHrTeA7LgxP9njD1xy8HSsPc7lib49tWV5AU8wkJZ"><script src="https://webforms.pipedrive.com/f/loader"></script></div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Get Elastic APM ready in 5&#8242; on Clever Cloud</title>
		<link>https://stagingv6.cleverapps.io/blog/features/2020/03/12/deploy-elastic-apm-in-five-minutes/</link>
		
		<dc:creator><![CDATA[Valeriane Venance]]></dc:creator>
		<pubDate>Thu, 12 Mar 2020 11:15:00 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<guid isPermaLink="false">https://www2.cleverapps.io/wp/blog/technology/2020/03/12/deploy-elastic-apm-in-five-minutes/</guid>

					<description><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1.jpg 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-300x116.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-1024x395.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-768x296.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>APM means Application Performance Monitoring. When we say APM in the IT context, we refer to solutions that monitor the platform hosting the application and the app itself.</p>
<p>APM solutions extract information and data about processes, memory usage, disk reading or writing operations/seconds, and other information about the hosting platform.<span id="more-2970"></span> On the application side, they monitor in and out requests, errors, issues, and even code execution to highlight memory and time consuming processes.</p>
<p>These tools can be very important when you are on a cloud based service that auto scales, because some of these issues may be hidden by the auto allocation of more resources to an application. They also give the opportunity to check if the cloud provider&#39;s SLA is honored.</p>
<h2 id="apm-by-elastic">APM by Elastic</h2>
<p>Available since version 6.2 (released in 2018), <a href="https://www.elastic.co/products/apm">Elastic APM</a> has proven its efficiency on monitoring and improving applications. Elastic APM monitors in real-time memory allocations, bandwidth usage, data rates, response time, database queries, CPU resources on the client side, calls to cache, unhandled errors and exceptions with their stack trace, aggregates logs in a pretty format and much more thanks to client and server side APM agents.</p>
<p>Distributed tracing feature allows you to see how a request flows into your micro-services architecture and to identify what exactly needs to be improved.</p>
<p>As all the collected data are stored and indexed in Elasticsearch, it&#39;s very easy to query them and point out bottlenecks.</p>
<p>Additionally, data is automatically available to consultation in a <a href="https://www.elastic.co/fr/products/kibana">Kibana</a> dashboard. This dashboard comes with a special UI from Elastic where you can conveniently explore your data via generated charts, see metrics about CPU and system memory usage, get the best out of their default filtering by request type, request results, errors with the already identified culprit. And of course you can investigate by search, all of this working out of the box.</p>
<p>And as if it was not enough to really improve our &quot;coding, debugging and releasing&quot; workflows, Elastic APM can send email alerts or Slack notifications when issues arise.</p>
<p>From a practical point of view, APM needs an instance of Elasticsearch, an APM server, Kibana and an agent on the application side. On Clever Cloud, all you need to do is to configure your application to use the agent. Let&#39;s see how to do that.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte9da1a8d579819a3/5dcb10f1257ee801fd16d1ab/screenshot-kibana-apm-os-dashboard.jpg" alt="APM dashboard in kibana"></p>
<h2 id="elastic-apm-on-clever-cloud">Elastic APM on Clever Cloud</h2>
<p>If you have read other blog posts of mine, you may know that I&#39;m a Ruby on Rails lover, so no surprise if I chose this Framework to demonstrate how easy it is to get started with the Elastic APM on Clever Cloud. However, APM Agents are available in many languages, so you can follow this tutorial and replace the Ruby on Rails application by one of yours hosted on Clever Cloud that is written in one of the following languages: Go, Java, JavaScript (backend or frontend) or Python.</p>
<h3 id="creating-the-rails-application">Creating the Rails application</h3>
<p>Well, I&#39;m not really a person that likes to do the same thing twice so as I already wrote an article on how to deploy Ruby on Rails applications on Clever Cloud, I will start this tutorial by considering you already have an application running like at the end of my previous article. If you don&#39;t, do not hesitate to take a break to follow <a href="https://stagingv6.cleverapps.io/blog/engineering/2019/05/07/setup-your-ruby-on-rails-online-dev-environment/">the tutorial</a>, it takes five minutes to be all set.</p>
<h3 id="creating-the-es-stack-on-clever-cloud">Creating the ES stack on Clever Cloud</h3>
<p>Well, it&#39;s pretty easy:</p>
<ul>
<li>Go to your Clever Cloud console, under the organization where your application lives, select <strong>Create</strong> then <strong>an add-on</strong>. Scroll down until you find and select <strong>Elastic Stack</strong>.</li>
<li>On the next screen select the plan you need, there is no minimal size to benefit from these features.</li>
<li>On the next screen enable APM and Kibana</li>
<li>You will now be prompted to name your add-on, and you will be able to select the deployment region. Fine tune as you need and press <strong>next</strong>.</li>
<li>Go to the <strong>Service dependencies</strong> section of your application, then select the APM server in the <strong>Link applications</strong> drop down menu.</li>
</ul>
<p>The Elastic Stack add-on will be automatically created: Elasticsearch, an APM server and a Kibana instance will start. You will see them appear shortly under your organization; there&#39;s nothing more you need to do to start using them.</p>
<p>If you navigate to your application&#39;s <strong>Environment variables</strong> menu, you will see that you can now use environment variables provided by the add-on we just created. And fortunately this is almost everything we need to finish this configuration.</p>
<p><strong>⚠️ Warning:</strong> Make sure that you linked the <ins>APM server</ins>, and not the Elastic add-on. Otherwise, you won&#39;t have the correct ENV VAR for the next steps.</p>
<h3 id="configure-your-application-for-apm">Configure your Application for APM</h3>
<h4 id="ruby-on-rails">Ruby on Rails</h4>
<p>Go in your terminal, under your application repository.</p>
<ul>
<li>with your favorite text editor, edit the <code>Gemfile</code> to add <code>gem &#39;elastic-apm&#39;</code>.</li>
<li>Create a file named <code>config/elastic_apm.yml</code> that you will fill with this:</li>
</ul>
<pre><code class="language-yaml">server_url: &lt;%= ENV[&quot;ELASTIC_APM_SERVER_URLS&quot;] %&gt; 
secret_token: &lt;%= ENV[&quot;ELASTIC_APM_SECRET_TOKEN&quot;] %&gt;
</code></pre>
<p>You may here notice the usage of environment variables to protect APM server&#39;s secrets. You can use these environment variables thanks to linking your application to your APM server on Clever Cloud.</p>
<h4 id="other-languages">Other languages</h4>
<p>You can find <a href="https://www.elastic.co/guide/en/apm/agent/index.html">here</a> the list of all the APM agents by language. You can just follow the simple steps and refer to the environment variables mentioned in the Ruby on Rails section to replace host url and secret token values. You may also need to use additional environment variables, read <a href="https://stagingv6.cleverapps.io/doc/admin-console/environment-variables/">this</a> to add them to your Clever Cloud application.</p>
<h3 id="deploying-the-apm-agent">Deploying the APM agent</h3>
<p>Okay, that was it. Now, you can add, commit and push these changes to Clever Cloud either via the CLI <code>clever deploy</code> or by pushing on the Clever Cloud git remote (usually named <code>clever</code>) of your application using <code>git push clever master</code>. Your application will restart within seconds and instantly connect to the APM server thanks to the environment variables we provided.</p>
<h3 id="enjoying-your-apm--kibana">Enjoying your APM / Kibana</h3>
<p>Now that our application is restarted, we can go to our Kibana application in Clever Cloud and click the link icon at the top right of the application menus. This will open a new tab with a Clever Cloud login form. Connect with your Clever Cloud credentials. This will open your Kibana after a brief apparition of a Keycloak page.</p>
<p>As Keycloak is not the topic here, all I&#39;ll say is that authentication to Kibana is delegated to Clever Cloud using this solution. If you want to know more about it, <a href="https://stagingv6.cleverapps.io/doc/addons/elastic/#kibana">read this</a>.</p>
<p>In Kibana, find the APM section in the menu on the left (tip: you can unroll the menu with a button at the bottom of the menu). Click it and <em>Wow!</em> you already can visualize your first application performance metrics in the beautiful Elastic UI for Kibana.</p>
<p>Here&#39;s a step by step video:</p>
<div style="position: relative; padding-bottom: 50.79962370649106%; height: 0;">
  <iframe src="https://www.loom.com/embed/af70aab3a26a41ac88cdb8094fd64862" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe>
</div>

<h2 id="going-further">Going further</h2>
<p>What we&#39;ve done so far is pretty great as we can now monitor our applications performances in real time and we needed to setup almost nothing. This is <em>way</em> better than having nothing, but if you&#39;re familiar with APM tools you may want to customize and/or add more data to your reportings.</p>
<p>You can read the configuration section of each agent to get the best out of the configuration file we created. You will be able to extend the APM server side agent&#39;s configuration like adding your own tags and key filters, decide what exactly you want to capture for each request to your server, fine tune the way the data is sent to the APM server including size and time of the requests and much more. You can learn more about the data model of the events captured by APM <a href="https://www.elastic.co/guide/en/apm/get-started/current/apm-data-model.html">here</a>. You are going to learn here how to enrich your events with metadata to really customize your data. If your application is client side, you can enable the RUM (Real User Monitoring) by starting <a href="https://www.elastic.co/guide/en/apm/get-started/current/rum.html">here</a>.</p>
<p>Happy monitoring!</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1400" height="540" src="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1.jpg 1400w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-300x116.jpg 300w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-1024x395.jpg 1024w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-768x296.jpg 768w, https://staging-cc-assetsv6.cellar-c2.services.clever-cloud.com/uploads/2021/08/apm-elastic-clever-cloud-1-1368x528.jpg 1368w" sizes="auto, (max-width: 1400px) 100vw, 1400px" /></p><p>APM means Application Performance Monitoring. When we say APM in the IT context, we refer to solutions that monitor the platform hosting the application and the app itself.</p>
<p>APM solutions extract information and data about processes, memory usage, disk reading or writing operations/seconds, and other information about the hosting platform.<span id="more-2970"></span> On the application side, they monitor in and out requests, errors, issues, and even code execution to highlight memory and time consuming processes.</p>
<p>These tools can be very important when you are on a cloud based service that auto scales, because some of these issues may be hidden by the auto allocation of more resources to an application. They also give the opportunity to check if the cloud provider&#39;s SLA is honored.</p>
<h2 id="apm-by-elastic">APM by Elastic</h2>
<p>Available since version 6.2 (released in 2018), <a href="https://www.elastic.co/products/apm">Elastic APM</a> has proven its efficiency on monitoring and improving applications. Elastic APM monitors in real-time memory allocations, bandwidth usage, data rates, response time, database queries, CPU resources on the client side, calls to cache, unhandled errors and exceptions with their stack trace, aggregates logs in a pretty format and much more thanks to client and server side APM agents.</p>
<p>Distributed tracing feature allows you to see how a request flows into your micro-services architecture and to identify what exactly needs to be improved.</p>
<p>As all the collected data are stored and indexed in Elasticsearch, it&#39;s very easy to query them and point out bottlenecks.</p>
<p>Additionally, data is automatically available to consultation in a <a href="https://www.elastic.co/fr/products/kibana">Kibana</a> dashboard. This dashboard comes with a special UI from Elastic where you can conveniently explore your data via generated charts, see metrics about CPU and system memory usage, get the best out of their default filtering by request type, request results, errors with the already identified culprit. And of course you can investigate by search, all of this working out of the box.</p>
<p>And as if it was not enough to really improve our &quot;coding, debugging and releasing&quot; workflows, Elastic APM can send email alerts or Slack notifications when issues arise.</p>
<p>From a practical point of view, APM needs an instance of Elasticsearch, an APM server, Kibana and an agent on the application side. On Clever Cloud, all you need to do is to configure your application to use the agent. Let&#39;s see how to do that.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte9da1a8d579819a3/5dcb10f1257ee801fd16d1ab/screenshot-kibana-apm-os-dashboard.jpg" alt="APM dashboard in kibana"></p>
<h2 id="elastic-apm-on-clever-cloud">Elastic APM on Clever Cloud</h2>
<p>If you have read other blog posts of mine, you may know that I&#39;m a Ruby on Rails lover, so no surprise if I chose this Framework to demonstrate how easy it is to get started with the Elastic APM on Clever Cloud. However, APM Agents are available in many languages, so you can follow this tutorial and replace the Ruby on Rails application by one of yours hosted on Clever Cloud that is written in one of the following languages: Go, Java, JavaScript (backend or frontend) or Python.</p>
<h3 id="creating-the-rails-application">Creating the Rails application</h3>
<p>Well, I&#39;m not really a person that likes to do the same thing twice so as I already wrote an article on how to deploy Ruby on Rails applications on Clever Cloud, I will start this tutorial by considering you already have an application running like at the end of my previous article. If you don&#39;t, do not hesitate to take a break to follow <a href="https://stagingv6.cleverapps.io/blog/engineering/2019/05/07/setup-your-ruby-on-rails-online-dev-environment/">the tutorial</a>, it takes five minutes to be all set.</p>
<h3 id="creating-the-es-stack-on-clever-cloud">Creating the ES stack on Clever Cloud</h3>
<p>Well, it&#39;s pretty easy:</p>
<ul>
<li>Go to your Clever Cloud console, under the organization where your application lives, select <strong>Create</strong> then <strong>an add-on</strong>. Scroll down until you find and select <strong>Elastic Stack</strong>.</li>
<li>On the next screen select the plan you need, there is no minimal size to benefit from these features.</li>
<li>On the next screen enable APM and Kibana</li>
<li>You will now be prompted to name your add-on, and you will be able to select the deployment region. Fine tune as you need and press <strong>next</strong>.</li>
<li>Go to the <strong>Service dependencies</strong> section of your application, then select the APM server in the <strong>Link applications</strong> drop down menu.</li>
</ul>
<p>The Elastic Stack add-on will be automatically created: Elasticsearch, an APM server and a Kibana instance will start. You will see them appear shortly under your organization; there&#39;s nothing more you need to do to start using them.</p>
<p>If you navigate to your application&#39;s <strong>Environment variables</strong> menu, you will see that you can now use environment variables provided by the add-on we just created. And fortunately this is almost everything we need to finish this configuration.</p>
<p><strong>⚠️ Warning:</strong> Make sure that you linked the <ins>APM server</ins>, and not the Elastic add-on. Otherwise, you won&#39;t have the correct ENV VAR for the next steps.</p>
<h3 id="configure-your-application-for-apm">Configure your Application for APM</h3>
<h4 id="ruby-on-rails">Ruby on Rails</h4>
<p>Go in your terminal, under your application repository.</p>
<ul>
<li>with your favorite text editor, edit the <code>Gemfile</code> to add <code>gem &#39;elastic-apm&#39;</code>.</li>
<li>Create a file named <code>config/elastic_apm.yml</code> that you will fill with this:</li>
</ul>
<pre><code class="language-yaml">server_url: &lt;%= ENV[&quot;ELASTIC_APM_SERVER_URLS&quot;] %&gt; 
secret_token: &lt;%= ENV[&quot;ELASTIC_APM_SECRET_TOKEN&quot;] %&gt;
</code></pre>
<p>You may here notice the usage of environment variables to protect APM server&#39;s secrets. You can use these environment variables thanks to linking your application to your APM server on Clever Cloud.</p>
<h4 id="other-languages">Other languages</h4>
<p>You can find <a href="https://www.elastic.co/guide/en/apm/agent/index.html">here</a> the list of all the APM agents by language. You can just follow the simple steps and refer to the environment variables mentioned in the Ruby on Rails section to replace host url and secret token values. You may also need to use additional environment variables, read <a href="https://stagingv6.cleverapps.io/doc/admin-console/environment-variables/">this</a> to add them to your Clever Cloud application.</p>
<h3 id="deploying-the-apm-agent">Deploying the APM agent</h3>
<p>Okay, that was it. Now, you can add, commit and push these changes to Clever Cloud either via the CLI <code>clever deploy</code> or by pushing on the Clever Cloud git remote (usually named <code>clever</code>) of your application using <code>git push clever master</code>. Your application will restart within seconds and instantly connect to the APM server thanks to the environment variables we provided.</p>
<h3 id="enjoying-your-apm--kibana">Enjoying your APM / Kibana</h3>
<p>Now that our application is restarted, we can go to our Kibana application in Clever Cloud and click the link icon at the top right of the application menus. This will open a new tab with a Clever Cloud login form. Connect with your Clever Cloud credentials. This will open your Kibana after a brief apparition of a Keycloak page.</p>
<p>As Keycloak is not the topic here, all I&#39;ll say is that authentication to Kibana is delegated to Clever Cloud using this solution. If you want to know more about it, <a href="https://stagingv6.cleverapps.io/doc/addons/elastic/#kibana">read this</a>.</p>
<p>In Kibana, find the APM section in the menu on the left (tip: you can unroll the menu with a button at the bottom of the menu). Click it and <em>Wow!</em> you already can visualize your first application performance metrics in the beautiful Elastic UI for Kibana.</p>
<p>Here&#39;s a step by step video:</p>
<div style="position: relative; padding-bottom: 50.79962370649106%; height: 0;">
  <iframe src="https://www.loom.com/embed/af70aab3a26a41ac88cdb8094fd64862" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe>
</div>

<h2 id="going-further">Going further</h2>
<p>What we&#39;ve done so far is pretty great as we can now monitor our applications performances in real time and we needed to setup almost nothing. This is <em>way</em> better than having nothing, but if you&#39;re familiar with APM tools you may want to customize and/or add more data to your reportings.</p>
<p>You can read the configuration section of each agent to get the best out of the configuration file we created. You will be able to extend the APM server side agent&#39;s configuration like adding your own tags and key filters, decide what exactly you want to capture for each request to your server, fine tune the way the data is sent to the APM server including size and time of the requests and much more. You can learn more about the data model of the events captured by APM <a href="https://www.elastic.co/guide/en/apm/get-started/current/apm-data-model.html">here</a>. You are going to learn here how to enrich your events with metadata to really customize your data. If your application is client side, you can enable the RUM (Real User Monitoring) by starting <a href="https://www.elastic.co/guide/en/apm/get-started/current/rum.html">here</a>.</p>
<p>Happy monitoring!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
