{"id":3341,"date":"2024-03-13T08:58:00","date_gmt":"2024-03-13T15:58:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/"},"modified":"2024-03-13T08:58:00","modified_gmt":"2024-03-13T15:58:00","slug":"maximizing-couchbase-capella-eventing-observability","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/maximizing-couchbase-capella-eventing-observability\/","title":{"rendered":"Maximizing Couchbase Capella Eventing Observability"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><span>In this blog post, we&#8217;ll show how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.couchbase.com\/products\/capella\/\"><span>Couchbase Capella<\/span><\/a><span> is a multi-model NoSQL cloud data platform. It delivers millisecond data response at scale, with the best price-performance of any document Database-as-a-Service. Capella <\/span><a href=\"https:\/\/www.couchbase.com\/products\/eventing\/\"><span>Eventing Service<\/span><\/a><span>, enables user-defined business logic to be triggered in real-time when there are changes to data in Capella. Typical use cases include enriching documents, cascade deletes, propagating data changes inside a database, and more.\u00a0<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Elastic stack (also known as the ELK Stack) offers a powerful centralized logging solution to create insights, set alerts based on KPIs, and keep track of application behavior.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Capella Eventing functions are easy to create using the Data Tools Eventing editor in the UI. Eventing application logs allow users to identify and capture various business logic-related activities and errors via user-defined messages specific to each Eventing function. While the application logs can be viewed in the Capella UI, centralized log management and analytics using specialized logging solutions could be helpful in many scenarios. This blog shows you step-by-step instructions on how to bring Eventing application logs to Elastic and help with centralized log storage and analytics.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/03\/image_2024-03-12_131411906.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-15418 size-large\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_131411906-1024x540-1.png\" alt=\"\" width=\"900\" height=\"475\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisite<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span>Couchbase Capella Deployment with Data and Eventing services. <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><span>Sign up<\/span><\/a><span> for a trial account.\u00a0<\/span><\/li>\n\n\n<li><span>ElasticSearch Cloud Deployment. <\/span><a href=\"https:\/\/cloud.elastic.co\/registration\"><span>Sign up<\/span><\/a><span> for a trial account.<\/span><\/li>\n\n\n<li><a href=\"https:\/\/aws.amazon.com\/free\"><span>AWS account<\/span><\/a><span> with an EC2 instance for running <\/span><a href=\"https:\/\/docs.couchbase.com\/elasticsearch-connector\/current\/index.html\"><span>Couchbase ElasticSearch Connector<\/span><\/a><span> that can be downloaded <\/span><a href=\"https:\/\/docs.couchbase.com\/elasticsearch-connector\/current\/release-notes.html\"><span>here<\/span><\/a><span>.<\/span><\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Overview of the necessary steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>Setting Up Capella Cluster<\/strong>: Start by creating a Capella Cluster with data and eventing services. <\/span><span>A quick guide can be found on <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/get-started\/create-account.html\"><span>Couchbase Capella documentation<\/span><\/a><span>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>Bucket\/Scope\/Collection Creation<\/strong>: Create the necessary buckets, scopes, and collections in Couchbase. This includes &#8216;data&#8217;, &#8216;eventing-logs&#8217;, and their respective scopes and collections.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>Eventing Functions Preparation<\/strong>: Prepare the eventing functions for data population and transformation. This involves creating synthetic datasets and modifying them to create logs.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>ElasticSearch Cluster and Index Creation<\/strong>: Set up your ElasticSearch cluster and create an index for efficient data handling.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>VPC and Private Link Setup<\/strong>: Create a new VPC for the Elastic Connector and establish a private link from Couchbase Capella to the VPC.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>ElasticSearch Traffic Filter<\/strong>: Implement traffic filtering for secure data transfer.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>Install and Run Couchbase ElasticSearch Connector<\/strong>: Install the Couchbase ElasticSearch Connector on an EC2 machine and configure it for log shipping.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>Data Visualization and Analysis<\/strong>: Use the collected data source to visualize and analyze logs, exploring the insights they provide.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Detailed Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Couchbase Environment<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span>We need to create two buckets and their scopes and collection. On one side we will create all we need to manage data and eventing functions. On the other one we will create a second one dedicated to the logs generated by the eventing functions.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The foundations of this simple activity can be found on the <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/data-service\/about-buckets-scopes-collections.html\"><span>Couchbase Capella documentation<\/span><\/a><span> which illustrates the principles and the actions involved. Note that bucket creation involves the configuration of several settings, of which the most prominent is Memory Quota. For testing purposes you can choose 100 MB, otherwise an <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/buckets-memory-and-storage\/storage-engines.html#couchstore-and-magma-at-a-glance\"><span>accurate evaluation<\/span><\/a><span> will be necessary.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Create two buckets with the following structure:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span>Name: \u201c<\/span><b>data<\/b><span>\u201d<\/span>\n<ul>\n<li><span>Scope Name: \u201c<\/span><b>eventing<\/b><span>\u201d<\/span>\n<ul>\n<li><span>Collection Name: \u201c<\/span><b>meta<\/b><span>\u201d<\/span><span><br>\n<\/span><i><span>Storage for eventing functions checkpoints<\/span><\/i><span><br>\n<\/span><\/li>\n<\/ul>\n<\/li>\n<li><span>Scope Name: \u201c<\/span><b>inventory<\/b><span>\u201d<\/span>\n<ul>\n<li><span>Collection Name: \u201c<\/span><b>data<\/b><span>\u201d<\/span><span><br>\n<\/span><i><span>Storage for actual data<\/span><\/i><span><br>\n<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n<li><span>Name: \u201c<\/span><b>eventing-logs<\/b><span>\u201d<\/span>\n<ul>\n<li><span>Scope Name: \u201c<\/span><b>eventing<\/b><span>\u201d<\/span>\n<ul>\n<li><span>Collection Name: \u201c<\/span><b>logs<\/b><span>\u201d<\/span><span><br>\n<\/span><i><span>Storage for logs. Optionally we can set a TTL to reduce the amount of storage.<\/span><\/i><\/li>\n<\/ul>\n<\/li>\n<li><span>Scope Name: \u201c<\/span><b>elastic-checkpoints<\/b><span>\u201d<\/span>\n<ul>\n<li><span>Collection Name: \u201c<\/span><b>connector<\/b><span>\u201d<\/span><span><br>\n<\/span><i><span>Storage for Couchbase-Elasticsearch Connector checkpoints<\/span><\/i><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Data population<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span>We will now create two eventing functions. If this is the first time you create an eventing function, you can familiarize yourself with the environment <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/eventing-service\/manage-eventing-functions.html\"><span>following this guide<\/span><\/a><span>.\u00a0<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The purpose of these functions is to:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><i><span>First Function<\/span><\/i><span>: create data we can work on. A dataset representing a product catalog.<\/span><span><br>\n<\/span><span><br>\n<\/span><span>This function creates simple json documents, introducing some variability across 100000 iterations. While this is not a realistic product catalog, it sets a good ground for experimenting eventing functions that need to log the way it is performing. Note that the function is triggered the first time by creating an empty document.<\/span><\/li>\n\n\n<li><i><span>Second Function<\/span><\/i><span>: the actual eventing function with some business logic we would like to observe through ELK stack.<\/span><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span>While the eventing function runs unbounded across all the new dataset, it substitutes the property <\/span><span>category<\/span><span> whenever it matches the value \u201c<\/span><span>Category 3<\/span><span>\u201d and it changes this value to \u201c<\/span><span>jeans<\/span><span>\u201d. In several parts of the function we can observe that it is conveniently called a function called <\/span><b>logStuff<\/b><span>: Its purpose is to save a log line in a dedicated collection that will be later on replicated to ElasticSearch and indexed.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data population function<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Create an eventing function with the following configurations:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2024\/03\/image_2024-03-12_130932355.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-15414 size-large\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130932355-1024x797-1.png\" alt=\"\" width=\"900\" height=\"700\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>And the following bucket binding:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-15415\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_131012849-1024x400-1.png\" alt=\"\" width=\"900\" height=\"352\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Here is the function:<\/span><span><br>\n<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;js&#8221; decode=&#8221;true&#8221;]function OnUpdate(doc, meta) {<br \/>\n\u00a0\u00a0\u00a0\u00a0\/\/ Placeholder function for handling document updates<br \/>\n\u00a0\u00a0\u00a0\u00a0if(meta.id == &#8216;start&#8217;) {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for(let i = 1; i &lt;= 100000; i++) {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var item = {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;inventoryItem&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;itemId&#8221;: i,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;name&#8221;: &#8220;Item &#8221; + i,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;price&#8221;: Math.random() * 100, \/\/ Random price between 0 and 100<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;inStock&#8221;: true,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;category&#8221;: &#8220;Category &#8221; + (i % 10) \/\/ 10 different categories<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var key = &#8220;item_&#8221; + i;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dst[key] = item;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n}<\/p>\n<p>function OnDelete(meta) {<br \/>\n\u00a0\u00a0\u00a0\u00a0\/\/ Placeholder function for handling document deletions<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The moment the function gets a document in <em>data.inventory.data<\/em> with the ID <em>start<\/em>, it will generate 100000 random documents.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Note: to generate this document you just need to go to the <\/span><b>Data Tools<\/b><span> tab, select <\/span><b>Documents<\/b><span> and then click on the <\/span><b>Create New Document <\/b><span>button (remember to select the right collection! <\/span><span>Data -&gt; Inventory -&gt; Data<\/span><span>).\u00a0<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data Transformation function<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span>This second function will demonstrate how to persist logs on temporary storage to be used later on the ELK Stack. While performing its business logic on the <\/span><em>data.inventory.data<\/em><span> collection, it will save some application logs on the <\/span><em>eventing-logs.eventing.logs<\/em> <span>so that it will be able to later on export them to ElasticSearch.\u00a0<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The configuration:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15416\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_131106111.png\" alt=\"\" width=\"932\" height=\"769\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The bindings:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-15417\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_131126299.png\" alt=\"\" width=\"909\" height=\"626\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The function:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;js&#8221; decode=&#8221;true&#8221;]function OnUpdate(doc, meta) {<br \/>\n\u00a0\u00a0\u00a0\u00a0logStuff(&#8220;debug&#8221;, &#8220;start evaluating &#8221; + meta.id);<br \/>\n\u00a0\u00a0\u00a0\u00a0if(doc.category == &#8220;Category 3&#8221;) {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logStuff(&#8220;info&#8221;, &#8220;start modifying &#8221; + meta.id);<br \/>\n \u00a0\u00a0\u00a0\u00a0\u00a0doc.category = &#8220;jeans&#8221;;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0inventoryScope[meta.id] = doc;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logStuff(&#8220;info&#8221;, &#8220;end modifying &#8221; + meta.id);<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0logStuff(&#8220;debug&#8221;, &#8220;end evaluating &#8221; + meta.id);<br \/>\n}<\/p>\n<p>function OnDelete(meta, options) {<br \/>\n}<\/p>\n<p>function simpleHash(str) {<br \/>\n\u00a0\u00a0let hash = 0;<br \/>\n\u00a0\u00a0for (let i = 0; i &lt; str.length; i++) {<br \/>\n\u00a0\u00a0\u00a0\u00a0const char = str.charCodeAt(i);<br \/>\n\u00a0\u00a0\u00a0\u00a0hash = (hash &lt;&lt; 5) &#8211; hash + char;<br \/>\n\u00a0\u00a0\u00a0\u00a0hash &amp;= hash; \/\/ Convert to 32bit integer<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0\u00a0return new Uint32Array([hash])[0].toString(36);<br \/>\n}<\/p>\n<p>function logStuff(level, message) {<br \/>\n\u00a0\u00a0var date = new Date();<br \/>\n\u00a0\u00a0date.toISOString();<br \/>\n\u00a0\u00a0var logLine = {<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;@timestamp&#8221;: date,<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;log&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;level&#8221;: level,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;logger&#8221;: &#8220;couchbase.eventing&#8221;,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;origin&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;function&#8221;: &#8220;data-transformation-cat-3-to-tee&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;original&#8221;: message<br \/>\n\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;message&#8221;: message,<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;ecs&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;version&#8221;: &#8220;1.6.0&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0\u00a0var logEntryId = &#8220;data-transformation-&#8221; + Math.floor(Math.random() * 10000000) + date;<br \/>\n\u00a0\u00a0logCollectionScope[simpleHash(logEntryId)] = logLine;<br \/>\n}[\/crayon]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The function is responsible for modifying a certain category of data and transforming its label. In doing so, we need to keep track of how the function is performing through logs that will be later on analyzed with the ELK stack.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The <\/span><em>logStuff<\/em><span> function creates a JSON document with an ECS compliant format and persists it on a separate bucket.\u00a0<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Once the eventing function is created, remember to <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/eventing-service\/deploy-eventing-functions.html\"><b>deploy<\/b><\/a><span> it.\u00a0<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Once the dataset is created and the transformation function executed we should have a populated bucket of logs ready to be shipped to ElasticSearch.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><span>Note: In order to avoid collisions, logs lines are created with timestamps and random numbers later on hashed to save space.<\/span><\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Elastic Cloud configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Before starting synchronizing the data we need to create an index in ElasticSearch. Make sure to modify the Elasticsearch <\/span><a href=\"https:\/\/www.elastic.co\/guide\/en\/cloud-enterprise\/current\/ece-connect.html\"><span>endpoint URL<\/span><\/a><span> and to create an <\/span><a href=\"https:\/\/www.elastic.co\/guide\/en\/kibana\/current\/api-keys.html\"><span>API Key<\/span><\/a><span> with administrative rights.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Here is a CURL example:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;js&#8221; decode=&#8221;true&#8221;]curl -X PUT &#8220;https:\/\/&lt;your ElasticSearch endpoint here&gt;:443\/couchbase-ecs&#8221;<br \/>\n-H &#8220;Authorization: ApiKey &#8220;&lt;your API key&gt;&#8221;&#8221;<br \/>\n-H &#8220;Content-Type: application\/json&#8221;<br \/>\n-d &#8216;<br \/>\n{<br \/>\n\u00a0\u00a0&#8220;settings&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;number_of_shards&#8221;: 1,<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;number_of_replicas&#8221;: 1<br \/>\n\u00a0\u00a0},<br \/>\n\u00a0\u00a0&#8220;mappings&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0&#8220;properties&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;@timestamp&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;date&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;log&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;properties&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;level&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;keyword&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;logger&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;keyword&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;origin&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;properties&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;function&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;keyword&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;original&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;text&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;message&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;text&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;ecs&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;properties&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;version&#8221;: {<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8220;type&#8221;: &#8220;keyword&#8221;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0}<br \/>\n}'[\/crayon]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The index maps the data type of the logger so that it can be searched efficiently.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ElasticSearch Connector<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Network configuration<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><span>We need to create a VPC with an EC2 machine <\/span><span>with a public IP address<\/span><span> that will host the ElasticSearch connector. A regular EC2 instance with a 2-4 cpus will do the job for this test (we used a t2.medium). Of course, if this is going to be a production environment, an evaluation of the sizing of this machine would be an important step for this deployment.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Next step is to secure the connectivity between the newly create VPC and:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span>Couchbase Capella, and<\/span><\/li>\n\n\n<li><span>Elastic Cloud<\/span><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><span>The most practical way (testing purpose only!) is through public connectivity. On the Capella cluster settings we need to <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/allow-ip-address.html\"><span>whitelist the public IP of the EC2 instance<\/span><\/a><span> so that the Elasticsearch Connector can establish a connection to the database. For Elastic Cloud, instead, we need to create an <\/span><a href=\"https:\/\/www.elastic.co\/guide\/en\/cloud\/current\/ec-api-keys.html\"><span>API key<\/span><\/a><span>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>There is also the alternative to go through private links and extensive documentation can be found here:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span><a href=\"https:\/\/docs.couchbase.com\/cloud\/security\/add-aws-private-link.html\">Couchbase Capella<\/a><\/span><\/li>\n\n\n<li><a href=\"https:\/\/www.elastic.co\/blog\/secure-elastic-cloud-deployment-aws-privatelink-traffic-filter\"><span>Elastic Cloud<\/span><\/a><\/li>\n\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Couchbase-ElasticSearch connector<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><span>After having provisioned the EC2 instance we need to download the executables from the Couchbase website. Before that, please have a look <a href=\"https:\/\/docs.couchbase.com\/elasticsearch-connector\/current\/index.html\">at the requirements, here<\/a> and <a href=\"https:\/\/docs.couchbase.com\/elasticsearch-connector\/current\/release-notes.html\">download here<\/a>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>We need now to configure it modifying the <\/span><em><span>$CBES_HOME\/config\/default-connector.toml <\/span><\/em><span>file.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Here are a few sections that will resonate with you, some sections removed to keep it brief:<\/span><\/p>\n\n\n<p>[crayon nums=&#8221;false&#8221; lang=&#8221;default&#8221; decode=&#8221;true&#8221;][group]<br \/>\nname = &#8216;example-group&#8217;<\/p>\n<p>[group.static]<br \/>\nmemberNumber = 1 # A value from 1 to &#8216;totalMembers&#8217;, inclusive.<br \/>\ntotalMembers = 1<\/p>\n<p>[&#8230;]<\/p>\n<p>[couchbase]<br \/>\nhosts = [&#8216;&lt;your Capella private endpoint&gt;&#8217;]<br \/>\nnetwork = &#8216;auto&#8217;<br \/>\nbucket = &#8216;eventing-logs&#8217;<br \/>\nmetadataBucket = &#8216;eventing-logs&#8217;<br \/>\nmetadataCollection = &#8216;elastic-checkpoints.connector&#8217;<\/p>\n<p># your Capella username<br \/>\nusername = &#8216;hello&#8217;<\/p>\n<p># Remember to go to modify this file with the password<br \/>\npathToPassword = &#8216;secrets\/couchbase-password.toml&#8217;<\/p>\n<p>#Capella environment is always secured<br \/>\nsecureConnection = true<\/p>\n<p>[&#8230;]<\/p>\n<p>[elasticsearch]<br \/>\nhosts = [&#8216;https:\/\/&lt;your ElasticSearch endpoint here&gt;:443&#8217;]<br \/>\nusername = &#8216;elastic&#8217;<\/p>\n<p># Remember to go to modify this file with your ElasticSearch ApiKey<br \/>\npathToPassword = &#8216;secrets\/elasticsearch-password.toml&#8217;<br \/>\nsecureConnection = true<\/p>\n<p>[&#8230;]<\/p>\n<p>[elasticsearch.elasticCloud]<br \/>\nenabled = true<\/p>\n<p>[&#8230;]<\/p>\n<p># If true, never delete matching documents from Elasticsearch.<br \/>\nignoreDeletes = true<br \/>\n[[elasticsearch.type]]<br \/>\nmatchOnQualifiedKey = true<br \/>\nprefix = &#8216;eventing.logs.&#8217;<br \/>\nindex = &#8216;couchbase-ecs&#8217;<\/p>\n<p>[&#8230;][\/crayon]<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices and Tips<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Here are a few things might be useful to keep in mind:<\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span>Couchbase ElasticSearch connector &#8211; <\/span>Make sure that you get your data type right, <em><span>[[elasticsearch.type]]<\/span>. <\/em><span>Your connector won\u2019t feed data unless this is done properly.<\/span><\/li>\n\n\n<li><span>Couchbase Capella &#8211; <\/span><span>Don\u2019t forget to create the database credentials for the Connector!\u00a0<\/span><\/li>\n\n\n<li><span>ElasticSearch<\/span>\n<ul>\n<li><span>Once an index is created you can create a datasource from which you will be able to build your insights.<\/span><\/li>\n<li><span>ApiKeys can be created for administrative purpose (e.g., creating indexes) or applications (e.g., sending the data through the Connector). Make sure that you are using the right ones.<\/span><span><br>\n<\/span><\/li>\n<\/ul>\n<\/li>\n\n\n<li><span>Data Retention<\/span>\n<ul>\n<li><span>Saving logs can be very disk consuming. Avoid this by:<\/span>\n<ul>\n<li><span>Excluding delete notifications from the ElasticSearch Connector with the <\/span><em><span>ignoreDeletes = true<\/span><\/em> <span>flag<\/span><\/li>\n<li><span>Setting a TTL for the collection that contains your logs, so that Couchbase Capella will clean up logs automatically that are too old<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-15421\" src=\"https:\/\/www.couchbase.com\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-13_095458683-1024x621-1.png\" alt=\"\" width=\"900\" height=\"546\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span>Through this tutorial we have seen how to implement observability for our Eventing Functions deployed in Capella. As a next step you can <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><span>sign up<\/span><\/a><span> for a Capella trial and experiment for yourself the many features provided with the most powerful NoSQL database out there. To help you orient, you can also use <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\"><span>our playground<\/span><\/a><span> and our <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/introducing-couchbase-capella-iq\/\"><span>Capella iQ<\/span><\/a><span>, our generative AI assistant, for learning how to develop and experiment in a safe environment. <\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, we&#8217;ll show how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics. Couchbase Capella is a multi-model NoSQL cloud data platform. It delivers millisecond data response at scale, with the best price-performance of any document Database-as-a-Service. Capella Eventing Service, enables user-defined [&hellip;]<\/p>\n","protected":false},"author":85142,"featured_media":3337,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":""},"categories":[178,301,348],"tags":[799,83],"ppma_author":[806,807],"class_list":["post-3341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-connectors","category-cloud","category-eventing","tag-distributed-search","tag-elasticsearch"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Couchbase Capella &amp; AWS Services for Eventing Tutorial<\/title>\n<meta name=\"description\" content=\"Learn how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics here.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/maximizing-couchbase-capella-eventing-observability\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Maximizing Couchbase Capella Eventing Observability\" \/>\n<meta property=\"og:description\" content=\"Learn how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics here.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/maximizing-couchbase-capella-eventing-observability\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-13T15:58:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130813634.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"380\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ravi Kesarwani, Principal Product Manager, Davide Pellegatta, Senior Solutions Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ravi Kesarwani, Principal Product Manager\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/\"},\"author\":{\"name\":\"Ravi Kesarwani, Principal Product Manager\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/0a469591121b614c83166c5119490620\"},\"headline\":\"Maximizing Couchbase Capella Eventing Observability\",\"datePublished\":\"2024-03-13T15:58:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/\"},\"wordCount\":1917,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/image_2024-03-12_130813634.png\",\"keywords\":[\"distributed search\",\"elasticsearch\"],\"articleSection\":[\"Connectors\",\"Couchbase Capella\",\"Eventing\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/\",\"name\":\"Couchbase Capella & AWS Services for Eventing Tutorial\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/image_2024-03-12_130813634.png\",\"datePublished\":\"2024-03-13T15:58:00+00:00\",\"description\":\"Learn how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics here.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/image_2024-03-12_130813634.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/image_2024-03-12_130813634.png\",\"width\":720,\"height\":380},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/maximizing-couchbase-capella-eventing-observability\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Maximizing Couchbase Capella Eventing Observability\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/0a469591121b614c83166c5119490620\",\"name\":\"Ravi Kesarwani, Principal Product Manager\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4fc3d87bc151c978d59e2fb788a35f5d369d1c7f650080cedfdf21639047735f?s=96&d=mm&r=g95937b32fe10ba9d9aeb34a92cdbec19\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4fc3d87bc151c978d59e2fb788a35f5d369d1c7f650080cedfdf21639047735f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4fc3d87bc151c978d59e2fb788a35f5d369d1c7f650080cedfdf21639047735f?s=96&d=mm&r=g\",\"caption\":\"Ravi Kesarwani, Principal Product Manager\"},\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/ravikesarwani\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Capella & AWS Services for Eventing Tutorial","description":"Learn how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics here.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/maximizing-couchbase-capella-eventing-observability\/","og_locale":"es_MX","og_type":"article","og_title":"Maximizing Couchbase Capella Eventing Observability","og_description":"Learn how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics here.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/maximizing-couchbase-capella-eventing-observability\/","og_site_name":"The Couchbase Blog","article_published_time":"2024-03-13T15:58:00+00:00","og_image":[{"width":720,"height":380,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130813634.png","type":"image\/png"}],"author":"Ravi Kesarwani, Principal Product Manager, Davide Pellegatta, Senior Solutions Engineer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ravi Kesarwani, Principal Product Manager","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/"},"author":{"name":"Ravi Kesarwani, Principal Product Manager","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/0a469591121b614c83166c5119490620"},"headline":"Maximizing Couchbase Capella Eventing Observability","datePublished":"2024-03-13T15:58:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/"},"wordCount":1917,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130813634.png","keywords":["distributed search","elasticsearch"],"articleSection":["Connectors","Couchbase Capella","Eventing"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/","url":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/","name":"Couchbase Capella & AWS Services for Eventing Tutorial","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130813634.png","datePublished":"2024-03-13T15:58:00+00:00","description":"Learn how to use Couchbase Capella in conjunction with ElasticSearch and AWS services for efficient Eventing application log shipping and analytics here.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130813634.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_130813634.png","width":720,"height":380},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/maximizing-couchbase-capella-eventing-observability\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Maximizing Couchbase Capella Eventing Observability"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/0a469591121b614c83166c5119490620","name":"Ravi Kesarwani, Principal Product Manager","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/4fc3d87bc151c978d59e2fb788a35f5d369d1c7f650080cedfdf21639047735f?s=96&d=mm&r=g95937b32fe10ba9d9aeb34a92cdbec19","url":"https:\/\/secure.gravatar.com\/avatar\/4fc3d87bc151c978d59e2fb788a35f5d369d1c7f650080cedfdf21639047735f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4fc3d87bc151c978d59e2fb788a35f5d369d1c7f650080cedfdf21639047735f?s=96&d=mm&r=g","caption":"Ravi Kesarwani, Principal Product Manager"},"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/ravikesarwani\/"}]}},"acf":[],"authors":[{"term_id":806,"user_id":85142,"is_guest":0,"slug":"ravikesarwani","display_name":"Ravi Kesarwani, Principal Product Manager","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_132216963-2.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_132216963-2.png"},"author_category":"","first_name":"Ravi","last_name":"Kesarwani, Principal Product Manager","user_url":"","job_title":"","description":""},{"term_id":807,"user_id":85143,"is_guest":0,"slug":"davidepellegatta","display_name":"Davide Pellegatta, Senior Solutions Engineer","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_132345390-1.png","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/image_2024-03-12_132345390-1.png"},"author_category":"","first_name":"Davide","last_name":"Pellegatta, Senior Solutions Engineer","user_url":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/85142"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3341"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3341\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/3337"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3341"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}