#greyscale");filter:url("data:image/svg+xml;utf8, #greyscale");filter:grey;-webkit-filter:greyscale(100%);-webkit-backface-visibility:hidden;}.shadow-light{-moz-box-shadow:0 10px 20px 0 rgba(152,162,179,0.1),0 2px 6px 0 rgba(152,162,179,0.25) !important;-webkit-box-shadow:0 10px 20px 0 rgba(152,162,179,0.1),0 2px 6px 0 rgba(152,162,179,0.25) !important;-o-box-shadow:0 10px 20px 0 rgba(152,162,179,0.1),0 2px 6px 0 rgba(152,162,179,0.25) !important;-ms-box-shadow:0 10px 20px 0 rgba(152,162,179,0.1),0 2px 6px 0 rgba(152,162,179,0.25) !important;box-shadow:0 10px 20px 0 rgba(152,162,179,0.1),0 2px 6px 0 rgba(152,162,179,0.25) !important;}.shadow-dark{-moz-box-shadow:0 10px 20px 0 rgba(83,89,102,0.1),0 2px 6px 0 rgba(83,89,102,0.25) !important;-webkit-box-shadow:0 10px 20px 0 rgba(83,89,102,0.1),0 2px 6px 0 rgba(83,89,102,0.25) !important;-o-box-shadow:0 10px 20px 0 rgba(83,89,102,0.1),0 2px 6px 0 rgba(83,89,102,0.25) !important;-ms-box-shadow:0 10px 20px 0 rgba(83,89,102,0.1),0 2px 6px 0 rgba(83,89,102,0.25) !important;box-shadow:0 10px 20px 0 rgba(83,89,102,0.1),0 2px 6px 0 rgba(83,89,102,0.25) !important;}figure{margin:0;text-align:center;}figure i,.border-circle{background-position:center center;background-repeat:no-repeat;background-size:120% auto;display:block;height:170px;margin:0 auto;overflow:hidden;width:170px;border-top:6px solid #ccc;border-right:6px solid #ccc;border-bottom:6px solid #ccc;border-left:6px solid #ccc;-webkit-border-radius:340px;-moz-border-radius:340px;-ms-border-radius:340px;border-radius:340px;}figcaption{text-align:center;font-size:14px;line-height:24px;font-style:italic;}.circle-bg{background:#fff;-webkit-border-radius:104px;-moz-border-radius:104px;-ms-border-radius:104px;border-radius:104px;-moz-box-shadow:0px 2px 5px rgba(0,0,0,0.2);-webkit-box-shadow:0px 2px 5px rgba(0,0,0,0.2);-o-box-shadow:0px 2px 5px rgba(0,0,0,0.2);-ms-box-shadow:0px 2px 5px rgba(0,0,0,0.2);box-shadow:0px 2px 5px rgba(0,0,0,0.2);width:104px;height:104px;position:relative;display:inline-block;z-index:1;}.circle-bg img{bottom:0;height:70%;left:0;margin:auto;position:absolute;right:0;top:0;width:70%;}.circle-bg:before{content:" ";vertical-align:middle;height:100%;}.circle-bg .graph-img-center{left:6px;}.image-32-icon{height:32px !important;margin:0 0 16px !important;width:32px !important;}.image-64-icon{height:64px !important;margin:0 auto 16px !important;width:64px !important;}.onlyFadeIn{-webkit-animation:onlyFadeIn 1s;animation:onlyFadeIn 1s;}@-webkit-keyframes onlyFadeIn{0%{opacity:0;}100%{opacity:1;}}@keyframes onlyFadeIn{0%{opacity:0;}100%{opacity:1;}}.img-overflow{max-width:100%;height:auto;}@media (min-width:992px){.img-overflow{max-width:unset;max-height:500px;}}.embed-container iframe,.video iframe{border:0;height:287px;width:100%;}.play-icon{bottom:0;display:block;height:50px;left:0;margin:auto;position:absolute;right:0;top:0;z-index:2;}.video-thumb{position:relative;display:inline-block;max-width:100%;border-radius:10px;overflow:hidden;}.video-thumb .play-btn{bottom:0;height:64px;left:0;margin:auto;position:absolute;right:0;top:0;width:64px;}@media screen and (max-width:600px){.video-thumb{max-width:295px;}}.video-content-wrapper h3{color:var(--color-dark-blue);}.video-content-wrapper h3 a{color:var(--color-dark-blue);}.right-arrow{background-image:url(/static-res/images/right-blue-arrow.png);background-repeat:no-repeat;background-position:right 4px;padding-right:25px !important;color:#00a9e5;font-size:16px;display:inline-block;}.right-arrow:hover{color:#00a9e5;}.right-arrow .upgrade-icon{background-image:url(/static-res/images/refresh-icon.svg);background-repeat:no-repeat;background-position:0px 0px;display:inline-block;height:17px;padding-left:28px;vertical-align:middle;}.right-arrow:before{content:" ";vertical-align:middle;height:100%;}.right-arrow .graph-img-center{left:6px;}.checkmark{height:63px;width:63px;}.position-relative{position:relative;}.position-absolute{position:absolute;}@media screen and (min-width:768px) and (max-width:991px){.container{max-width:100% !important;}}@media screen and (max-width:767px){.container{width:100%;max-width:unset;}.common-container{width:100%;}.no-gutters{margin-right:0;margin-left:0;}.no-gutters>[class*=col-]{padding-right:0;padding-left:0;}}@media screen and (max-width:480px){.table-responsive table,.table-responsive table td{border:1px solid #ccc;}.table-responsive table th,.table-responsive table td th{text-align:center;font-weight:600;font-size:13px;}.table-responsive table td,.table-responsive table td td{padding:5px;font-size:13px;line-height:18px;}.table-responsive table td p a{font-size:13px;line-height:18px;}}a{color:var(--link-color);-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;text-decoration:underline;font-weight:600;}a:hover,a:focus{color:var(--link-hover-color);text-decoration:underline;box-shadow:none !important;}a.whiteurl{color:var(--color-white);}a.stretched-link:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background:transparent !important;background-color:rgba(0,0,0,0);}.btn-tertiary,.cta-link,a.btn-tertiary:not([href]):not([tabindex]){cursor:pointer;display:inline-block;text-decoration:none;color:var(--button-tertiary-color);font-weight:600;}.btn-tertiary svg,.cta-link svg,a.btn-tertiary:not([href]):not([tabindex]) svg{-webkit-transition:all 100ms ease-in;transition:all 100ms ease-in;left:8px;position:relative;height:inherit;}.btn-tertiary svg path,.cta-link svg path,a.btn-tertiary:not([href]):not([tabindex]) svg path{stroke:var(--button-tertiary-color);}.btn-tertiary:hover,.cta-link:hover,a.btn-tertiary:not([href]):not([tabindex]):hover{text-decoration:none;color:var(--button-tertiary-hover-color);}.btn-tertiary:hover svg,.cta-link:hover svg,a.btn-tertiary:not([href]):not([tabindex]):hover svg{left:14px;}.btn-tertiary:hover svg path,.cta-link:hover svg path,a.btn-tertiary:not([href]):not([tabindex]):hover svg path{stroke:var(--button-tertiary-hover-color);}.btn-tertiary:focus-visible,.cta-link:focus-visible,a.btn-tertiary:not([href]):not([tabindex]):focus-visible{text-decoration:none;color:var(--button-tertiary-hover-color);outline:2px solid var(--button-tertiary-active-offset-color);outline-offset:4px;border-radius:4px;padding-right:12px;}.btn-tertiary:focus-visible svg,.cta-link:focus-visible svg,a.btn-tertiary:not([href]):not([tabindex]):focus-visible svg{stroke:var(--button-tertiary-hover-color);}.btn-tertiary:focus-visible svg path,.cta-link:focus-visible svg path,a.btn-tertiary:not([href]):not([tabindex]):focus-visible svg path{stroke:var(--button-tertiary-hover-color);}.gdpr-text{margin-top:10px;}.gdpr-text p{font-size:12px;line-height:18px;opacity:1;}#marketo-fe-form{position:relative;}#marketo-fe-form .mktoForm{position:relative;width:100% !important;}#marketo-fe-form .mktoForm .mktoOffset{display:none;}#marketo-fe-form .mktoForm .mktoLabel,#marketo-fe-form .mktoForm legend{font-size:14px;font-weight:600;line-height:24px !important;text-align:left;width:auto !important;padding-top:0;margin-left:0;float:none;display:block;margin-bottom:4px;}#marketo-fe-form .mktoForm .mktoLabel[for=tempCheckBoxforForm]{margin-left:23px;width:calc(100% - 23px) !important;font-weight:normal;}#marketo-fe-form .mktoForm p,#marketo-fe-form .mktoForm #gdpr{opacity:1;margin-bottom:8px;}#marketo-fe-form .mktoForm .mktoFormCol{width:100%;min-height:unset;margin-bottom:0 !important;}#marketo-fe-form .mktoForm .mktoFieldWrap{margin-right:0px !important;width:100%;}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=hidden]{display:none;}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=text],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=email],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=number],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=url]{-webkit-appearance:none;}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=text],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=email],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=number],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel],#marketo-fe-form .mktoForm .mktoFieldWrap input[type=url],#marketo-fe-form .mktoForm .mktoFieldWrap select{width:100% !important;color:var(--color-ink);height:50px;line-height:40px !important;min-width:190px;padding:8px !important;font-size:14px;font-weight:400;border:1px solid var(--color-dark-gray);border-radius:0;position:relative;z-index:1;}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=text]:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=email]:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=number]:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel]:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=url]:focus,#marketo-fe-form .mktoForm .mktoFieldWrap select:focus{border-bottom:2px solid var(--color-elastic-blue);outline:none !important;}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=text].mktoInvalid,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=email].mktoInvalid,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=number].mktoInvalid,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel].mktoInvalid,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=url].mktoInvalid,#marketo-fe-form .mktoForm .mktoFieldWrap select.mktoInvalid{border-bottom:2px solid var(--color-dark-orange);}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=text].mktoInvalid:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=email].mktoInvalid:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=number].mktoInvalid:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel].mktoInvalid:focus,#marketo-fe-form .mktoForm .mktoFieldWrap input[type=url].mktoInvalid:focus,#marketo-fe-form .mktoForm .mktoFieldWrap select.mktoInvalid:focus{border-bottom:2px solid var(--color-elastic-blue);}#marketo-fe-form .mktoForm .mktoFieldWrap select{background-color:#fff;position:relative;line-height:normal !important;padding:8px 32px 8px 8px !important;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;background-image:url("/static-res/images/svg/icon-down-arrow-16-blue.svg");background-repeat:no-repeat;background-position:98% 50%;background-size:16px;}#marketo-fe-form .mktoForm .mktoFieldWrap textarea{border:1px solid var(--color-dark-gray);font-size:14px;height:6em;width:100% !important;padding:8px 16px;margin-bottom:32px;padding:8px 16px;position:relative;z-index:1;}#marketo-fe-form .mktoForm .mktoFieldWrap textarea:focus{outline:none;border-bottom:2px solid var(--color-elastic-blue);}#marketo-fe-form .mktoForm .mktoFieldWrap textarea.mktoInvalid{border-bottom:2px solid var(--color-dark-orange);}#marketo-fe-form .mktoForm .mktoFieldWrap textarea.mktoInvalid:focus{border-bottom:2px solid var(--color-elastic-blue);}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=checkbox]{height:auto !important;width:16px !important;position:relative;z-index:1;}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=checkbox]:after{background-color:var(--color-white);content:"";height:17px;left:-2px;position:absolute;top:-2px;width:17px;border-top:1px solid var(--color-dark-gray);border-right:1px solid var(--color-dark-gray);border-bottom:1px solid var(--color-dark-gray);border-left:1px solid var(--color-dark-gray);}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=checkbox]:checked:after{background-color:var(--color-elastic-blue);border-color:var(--color-elastic-blue);}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=checkbox]:checked:before{content:"";height:12px;left:3px;position:absolute;top:-2px;width:7px;z-index:1;border-right:2px solid rgb(255,255,255);border-bottom:2px solid rgb(255,255,255);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);}#marketo-fe-form .mktoForm .mktoFieldWrap input[type=checkbox][disabled]:after{border-color:#f8f9fb;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoRadioList{position:relative;z-index:1;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoRadioList label{margin-left:28px;margin-bottom:16px;line-height:14px;}#marketo-fe-form .mktoForm .mktoFieldWrap::-webkit-input-placeholder{font-size:14px;line-height:24px;}#marketo-fe-form .mktoForm .mktoFieldWrap::-moz-placeholder{font-size:14px;line-height:24px;}#marketo-fe-form .mktoForm .mktoFieldWrap:-ms-input-placeholder{font-size:14px;line-height:24px;}#marketo-fe-form .mktoForm .mktoFieldWrap:-moz-placeholder{font-size:14px;line-height:24px;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoCheckboxList{margin:16px 0px 10px 0px;width:100% !important;z-index:1;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoCheckboxList>label{font-size:14px;margin-bottom:8px;margin-left:32px;min-height:25px;margin-top:-2px;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoHtmlText{width:100% !important;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoGutter.mktoHasWidth{display:none;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoError{left:0;right:unset !important;bottom:unset !important;position:relative !important;z-index:0;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoError .mktoErrorArrowWrap{display:none;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoError .mktoErrorMsg{background-image:none !important;background-color:transparent !important;border:none !important;max-width:unset !important;box-shadow:none !important;text-shadow:none !important;color:var(--color-dark-orange) !important;font-size:14px !important;line-height:24px !important;margin-top:4px !important;padding-left:0;clear:both;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoError .mktoErrorMsg .mktoErrorDetail{display:inline !important;}#marketo-fe-form .mktoForm .mktoOffset,#marketo-fe-form .mktoForm .mktoRequiredField .mktoAsterix{display:none;}#marketo-fe-form .mktoForm .mktoButtonRow{width:100%;}#marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap{margin-left:unset !important;}#marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap .mktoButton{background:var(--color-elastic-blue);color:var(--color-white);display:inline-block;font-size:16px;font-weight:600;font-family:"MierB","Inter",Arial,sans-serif;height:50px;line-height:30px;margin:0;min-width:150px;padding:0 16px !important;text-align:center;text-transform:none;width:100%;border-top:1px solid var(--color-elastic-blue);border-right:1px solid var(--color-elastic-blue);border-bottom:1px solid var(--color-elastic-blue);border-left:1px solid var(--color-elastic-blue);-webkit-border-radius:4px !important;-moz-border-radius:4px !important;-ms-border-radius:4px !important;border-radius:4px !important;-moz-transition:all 200ms ease-in;-webkit-transition:all 200ms ease-in;-o-transition:all 200ms ease-in;-ms-transition:all 200ms ease-in;transition:all 200ms ease-in;}#marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap .mktoButton:hover{background:var(--color-dark-blue);border-color:var(--color-dark-blue);outline:none !important;}#marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap .mktoButton:active,#marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap .mktoButton:focus,#marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap .mktoButton:active:focus{border-color:var(--color-light-blue);outline:none !important;}.error-message{color:var(--color-dark-orange);font-size:14px;}#fallback-form{position:relative;}#fallback-form .fallback-form-title{font-weight:600;padding-bottom:10px;}#fallback-form .debug{border:1px solid red;color:red;position:absolute;top:-20px;display:none;}#fallback-form .input-wrapper p{font-size:12px;line-height:18px;}#fallback-form form.fallback{position:relative;text-align:left;max-width:100%;}#fallback-form form.fallback .input-wrapper input{width:100%;outline:none;}#fallback-form form.fallback .input-wrapper input[type=text],#fallback-form form.fallback .input-wrapper input[type=email],#fallback-form form.fallback .input-wrapper input[type=number],#fallback-form form.fallback .input-wrapper input[type=tel],#fallback-form form.fallback .input-wrapper input[type=url],#fallback-form form.fallback .input-wrapper select{width:100% !important;color:var(--color-ink);height:50px;max-height:50px;line-height:40px !important;min-width:190px;padding-left:8px !important;padding-right:8px !important;font-size:14px;font-weight:400;border-radius:0;border:1px solid var(--color-dark-gray);}#fallback-form form.fallback .input-wrapper input[type=text]:focus,#fallback-form form.fallback .input-wrapper input[type=email]:focus,#fallback-form form.fallback .input-wrapper input[type=number]:focus,#fallback-form form.fallback .input-wrapper input[type=tel]:focus,#fallback-form form.fallback .input-wrapper input[type=url]:focus,#fallback-form form.fallback .input-wrapper select:focus{border-bottom:2px solid var(--color-elastic-blue);outline:none !important;}#fallback-form form.fallback .input-wrapper input[type=text].mktoInvalid,#fallback-form form.fallback .input-wrapper input[type=email].mktoInvalid,#fallback-form form.fallback .input-wrapper input[type=number].mktoInvalid,#fallback-form form.fallback .input-wrapper input[type=tel].mktoInvalid,#fallback-form form.fallback .input-wrapper input[type=url].mktoInvalid,#fallback-form form.fallback .input-wrapper select.mktoInvalid{border-bottom:2px solid var(--color-dark-orange);}#fallback-form form.fallback .input-wrapper input[type=text].mktoInvalid:focus,#fallback-form form.fallback .input-wrapper input[type=email].mktoInvalid:focus,#fallback-form form.fallback .input-wrapper input[type=number].mktoInvalid:focus,#fallback-form form.fallback .input-wrapper input[type=tel].mktoInvalid:focus,#fallback-form form.fallback .input-wrapper input[type=url].mktoInvalid:focus,#fallback-form form.fallback .input-wrapper select.mktoInvalid:focus{border-bottom:2px solid var(--color-elastic-blue);}#fallback-form form.fallback .input-wrapper textarea{border:1px solid var(--color-dark-gray);height:4.5em;width:100% !important;margin-bottom:32px;}#fallback-form form.fallback .input-wrapper textarea:focus{outline:none;border-bottom:2px solid var(--color-elastic-blue);}#fallback-form form.fallback .input-wrapper textarea.mktoInvalid{border-bottom:2px solid var(--color-dark-orange);}#fallback-form form.fallback .input-wrapper textarea.mktoInvalid:focus{border-bottom:2px solid var(--color-elastic-blue);}#fallback-form form.fallback .input-wrapper input[type=checkbox]{height:auto !important;position:relative;width:16px !important;}#fallback-form form.fallback .input-wrapper input[type=checkbox]:after{background-color:var(--color-white);content:"";height:16px;left:0;position:absolute;top:0;width:16px;border-top:1px solid var(--color-dark-gray);border-right:1px solid var(--color-dark-gray);border-bottom:1px solid var(--color-dark-gray);border-left:1px solid var(--color-dark-gray);}#fallback-form form.fallback .input-wrapper input[type=checkbox]:checked:after{background-color:var(--color-elastic-blue);border-color:var(--color-elastic-blue);}#fallback-form form.fallback .input-wrapper input[type=checkbox]:checked:before{content:"";height:12px;left:5px;position:absolute;top:0px;width:7px;z-index:1;border-right:2px solid rgb(255,255,255);border-bottom:2px solid rgb(255,255,255);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);}#fallback-form form.fallback .input-wrapper::-webkit-input-placeholder{font-size:14px;line-height:24px;}#fallback-form form.fallback .input-wrapper::-moz-placeholder{font-size:14px;line-height:24px;}#fallback-form form.fallback .input-wrapper:-ms-input-placeholder{font-size:14px;line-height:24px;}#fallback-form form.fallback .input-wrapper:-moz-placeholder{font-size:14px;line-height:24px;}#fallback-form form.fallback label{font-size:14px;font-weight:600;line-height:24px !important;text-align:left;width:100% !important;margin-bottom:0;margin-top:24px;}#fallback-form form.fallback .asterix{font-weight:700;color:var(--color-dark-orange);}#fallback-form form.fallback .submit-form{cursor:pointer;min-width:140px;width:max-content;padding-right:16px;padding-left:16px;-webkit-transition:all 200ms ease-in;transition:all 200ms ease-in;background-color:var(--color-elastic-blue);color:var(--color-white);height:50px;font-weight:700;text-align:center;letter-spacing:0.025em;margin:0;border:1px solid var(--color-elastic-blue);border-radius:4px;cursor:pointer;}#fallback-form form.fallback .submit-form:hover{background:var(--color-dark-blue);border-color:var(--color-dark-blue);}#fallback-form form.fallback .submit-form:active{border-color:var(--color-light-blue);}#fallback-form form.fallback .submit-form:focus{box-shadow:none;}.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap,.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap{margin-bottom:24px;}.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=text],.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=email],.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=number],.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel],.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=url],.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=text],.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=email],.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=number],.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=tel],.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap input[type=url]{height:40px !important;}.mkto-form-wrapper.long-form #marketo-fe-form .mktoForm .mktoFieldWrap select,.marketo-form.long-form #marketo-fe-form .mktoForm .mktoFieldWrap select{height:auto !important;}.mkto-form-wrapper.inline #marketo-fe-form{position:relative;width:100%;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm{width:100% !important;padding:0px;position:relative;display:inline-flex;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoOffset,.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoAsterix{display:none;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol{margin-bottom:0 !important;float:none;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap{width:100%;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoHtmlText{display:none !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoHtmlText p{margin:0 !important;line-height:0 !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap input[type=email],.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap select{min-width:289px;width:100% !important;max-width:350px !important;margin-top:4px;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError{position:absolute !important;padding-bottom:unset;bottom:-52px !important;width:max-content;z-index:99 !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError .mktoErrorArrowWrap{display:block;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError .mktoErrorArrowWrap .mktoErrorArrow{background:rgba(255,255,255,0.9);border:1px solid var(--color-dark-orange) !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError .mktoErrorMsg{border:1px solid var(--color-dark-orange) !important;color:var(--color-dark-orange) !important;padding:8px !important;background:rgba(255,255,255,0.9) !important;border-radius:0 !important;width:auto !important;margin-top:7px !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoButtonRow{margin-top:4px;margin-left:16px;width:max-content !important;align-self:flex-end;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap{margin-left:0px !important;}.mkto-form-wrapper.inline .success-message{max-width:455px;width:100%;margin:0 auto;}.mkto-form-wrapper.inline.fallback{width:100%;max-width:455px;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback{display:inline-flex;align-items:end;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .input-wrapper input,.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .input-wrapper select{min-width:307px;width:100% !important;max-width:350px !important;margin-top:4px;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .button-wrapper{margin-top:4px;margin-left:16px;}.mkto-form-wrapper.inline.center #marketo-fe-form{margin-left:auto;margin-right:auto;}.mkto-form-wrapper.inline.center #marketo-fe-form .mktoForm{justify-content:center;}.mkto-form-wrapper.inline.center.fallback{max-width:455px !important;margin-left:auto;margin-right:auto;}.mkto-form-wrapper.inline.center.fallback #fallback-form{text-align:center;}.mkto-form-wrapper.inline.center .error-message{margin-top:16px;}@media screen and (max-width:1200px){.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap input[type=email],.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap select{min-width:270px;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback{width:100%;margin:0;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .input-wrapper input,.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .input-wrapper select{min-width:270px;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .button-wrapper{width:100%;}}@media screen and (max-width:991px){.react-tabs .react-tabs__tab{font-size:14px;}.mkto-form-wrapper.inline{margin-left:auto;margin-right:auto;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm{position:relative;display:block;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap{width:100%;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap input[type=email],.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap select{width:100% !important;max-width:unset !important;min-width:unset;margin-top:0;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError{width:auto;position:relative !important;top:8px;bottom:unset !important;padding-bottom:0;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError .mktoErrorMsg{padding:0 !important;width:auto !important;border:none !important;background:transparent !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoFormCol .mktoFieldWrap .mktoError .mktoErrorArrowWrap{display:none !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoButtonRow{margin-top:16px;margin-left:0;width:100% !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap{margin-left:0px !important;}.mkto-form-wrapper.inline #marketo-fe-form .mktoForm .mktoButtonRow .mktoButtonWrap .mktoButton{width:100% !important;}.mkto-form-wrapper.inline.fallback{max-width:455px;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback{display:block;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .input-wrapper input,.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .input-wrapper select{width:100% !important;max-width:unset !important;min-width:unset;margin-top:0;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .button-wrapper{margin:16px 0 0 0;}.mkto-form-wrapper.inline.fallback #fallback-form form.fallback .button-wrapper .submit-form{width:100% !important;}}.success-message{background:var(--color-white);color:var(--color-dark-teal) !important;border:1px solid var(--color-dark-teal) !important;padding:8px;text-align:center;}.success-message a{color:var(--color-dark-teal) !important;}.filter-wrapper{padding:32px 0px;}.filter-wrapper .header{display:flex;justify-content:space-between;border-bottom:1px solid var(--color-dark-gray);}.filter-wrapper .filter-row{width:100%;display:grid;grid-column-gap:32px;grid-row-gap:32px;grid-template-columns:1fr 1fr 1fr 1fr;align-items:baseline;}.filter-wrapper .filter-row .filter-column{width:100%;}.filter-wrapper .filter-row .filter-label{font-size:14px;font-weight:600;margin-bottom:5px;}@media screen and (max-width:991px){.filter-wrapper .container{padding:0 15px;}}@media screen and (max-width:768px){.filter-wrapper .header{padding-bottom:8px;}.filter-wrapper .container{padding:0 15px;}.filter-wrapper .filter-row{grid-template-columns:1fr 1fr;grid-template-rows:auto auto;}}@media screen and (max-width:575px){.filter-wrapper .header{display:flex;flex-direction:column;}.filter-wrapper .filter-row{grid-template-columns:1fr;}.filter-wrapper .filter-row .filter-column{margin:0 auto;width:300px;}}.card-small-padding{padding:8px;}.card-medium-padding{padding:16px;}.card-large-padding{padding:32px;}.card-xlarge-padding{padding:40px;}.card-xxlarge-padding{padding:48px;}.card-grid{display:-ms-grid;display:grid;grid-auto-columns:1fr;grid-template-columns:repeat(2,1fr);grid-template-rows:auto auto;grid-row-gap:32px;grid-column-gap:32px;}.card-grid-1x1{margin-right:auto;margin-left:auto;gap:32px;}@media (min-width:992px){.card-grid-1x1{gap:64px;}}.card-grid-1x1,.card-grid-1x1-sidebar{display:grid;justify-content:stretch;grid-auto-columns:1fr;grid-template-areas:".";grid-template-columns:1fr;grid-template-rows:auto;}.card-grid-1x1.col-sm-8,.card-grid-1x1-sidebar.col-sm-8{padding:0px;}.card-grid-1x1 .card-footer div:first-child,.card-grid-1x1-sidebar .card-footer div:first-child{margin-right:24px;}.card-grid-2x1{display:grid;margin-right:auto;margin-left:auto;justify-content:stretch;grid-auto-columns:1fr;grid-template-areas:".";grid-template-columns:repeat(2,1fr);grid-template-rows:auto;}.card-grid-2x1 .card-footer.align-self-left div:first-child{margin-right:24px;}.card-grid-3x1{display:grid;margin-right:auto;margin-left:auto;padding-left:0px;justify-content:stretch;grid-template-areas:".";grid-template-columns:repeat(3,1fr);grid-auto-columns:1fr;grid-template-rows:auto;}.card-grid-3x1 .card-footer.align-self-left div:first-child{margin-right:24px;}.card-grid-4x1{display:grid;margin-right:auto;margin-left:auto;justify-content:stretch;grid-column-gap:32px;grid-row-gap:32px;grid-template-columns:repeat(4,1fr);grid-template-rows:auto;}@media screen and (max-width:991px){.card-grid-3x1{grid-auto-flow:row;grid-template-areas:".";grid-template-columns:1fr 1fr;grid-template-rows:repeat(2,auto);}.card-grid-4x1{grid-row-gap:32px;grid-template-columns:1fr 1fr;grid-template-rows:auto auto;}}@media screen and (max-width:768px){.card-grid-3x1,.card-grid-4x1{grid-template-columns:1fr 1fr;}}@media screen and (max-width:575px){.card-grid-2x1{grid-template-columns:1fr;grid-template-rows:repeat(2,auto);}.card-grid-3x1{grid-template-columns:1fr;grid-template-rows:repeat(3,auto);}.card-grid-4x1{grid-template-columns:1fr;grid-template-rows:repeat(4,auto);}}.react-tabs .react-tabs__tab{cursor:pointer;margin-bottom:-2px;padding:0px 16px;margin-left:0;margin-right:0;}.react-tabs .react-tabs__tab h2{color:var(--color-black);font-size:16px;line-height:24px;padding-bottom:16px;font-weight:400;}.react-tabs .react-tabs__tab:focus{outline:0px none;}.react-tabs .react-tabs__tab:hover{border-bottom:2px solid var(--color-ink);}.react-tabs .react-tabs__tab--selected{color:var(--color-elastic-blue);cursor:text;display:block;margin-bottom:-2px;border-bottom:4px solid var(--carousel-tab-hover-border-color);}.react-tabs .react-tabs__tab--selected h2{color:var(--color-elastic-blue);}.react-tabs .react-tabs__tab--selected:hover{border-color:var(--color-elastic-blue);}.react-tabs .react-tabs__tab-panel{display:none;}.react-tabs .react-tabs__tab-panel--selected{display:block;}.instruction-module .react-tabs ul{border-bottom:0;}.instruction-module .react-tabs .top-tabs .react-tabs__tab{color:rgb(52,55,65);font-weight:400;height:40px;line-height:40px;margin:0px;padding:0px;text-align:center;text-transform:unset;width:200px;border-width:1px;border-style:solid;border-color:rgb(0,120,160);display:flex;justify-content:center;align-items:center;}.instruction-module .react-tabs .top-tabs .react-tabs__tab h2{padding-bottom:2px;}.instruction-module .react-tabs .top-tabs .react-tabs__tab--selected{background-color:var(--color-elastic-blue);}.instruction-module .react-tabs .top-tabs .react-tabs__tab--selected h2{color:#FFFFFF !important;}.instruction-module .react-tabs .vertical-tabs .react-tabs__tab h2{font-size:18px;line-height:22px;font-family:Inter,arial,sans-serif;}@media screen and (min-width:768px){.react-tabs .vertical-tabs .react-tabs__tab-list{border-bottom:0;border-left:1px solid var(--color-dark-gray);}.react-tabs .vertical-tabs .react-tabs__tab{margin-bottom:0;border-left:2px solid transparent;padding:8px 16px;}.react-tabs .vertical-tabs .react-tabs__tab h2{padding:5px 0;}.react-tabs .vertical-tabs .react-tabs__tab:hover{border-bottom:0;border-left:2px solid var(--color-ink);}.react-tabs .vertical-tabs .react-tabs__tab--selected{border-bottom:0;border-left:2px solid var(--color-elastic-blue);}.react-tabs .vertical-tabs .react-tabs__tab--selected:hover{border-left:2px solid var(--color-elastic-blue);}}@media screen and (max-width:767px){.code-carousel .react-tabs .react-tabs__tab-list{display:flex;flex-wrap:wrap;flex-direction:unset;margin-bottom:10px;}.code-carousel .react-tabs .react-tabs__tab{border-bottom:2px solid transparent;}.code-carousel .react-tabs .react-tabs__tab:hover{border-bottom:2px solid var(--color-ink);}.code-carousel .react-tabs .react-tabs__tab--selected{border-bottom:2px solid var(--carousel-tab-border-color);}.code-carousel .react-tabs .react-tabs__tab--selected:hover{border-bottom:4px solid var(--carousel-tab-hover-border-color);}}.carousel .carousel-one-column .react-tabs__tab,.carousel .carousel-two-column__tab-labels-left .react-tabs__tab{color:var(--carousel-tab-color);cursor:pointer;margin-left:0;margin-right:0;position:relative;font-size:16px;line-height:22px;font-weight:700;font-style:normal;}.carousel .carousel-one-column .react-tabs__tab:focus,.carousel .carousel-two-column__tab-labels-left .react-tabs__tab:focus{outline:0px none;}.carousel .carousel-one-column .react-tabs__tab h2,.carousel .carousel-two-column__tab-labels-left .react-tabs__tab h2{color:var(--carousel-tab-color);font-size:16px;line-height:24px;font-weight:400;padding:0px;}.carousel .carousel-one-column .react-tabs__tab--selected,.carousel .carousel-two-column__tab-labels-left .react-tabs__tab--selected{cursor:text;display:block;cursor:text;}.carousel .carousel-one-column .carousel-asset .card-deck-container-block.container,.carousel .carousel-one-column .carousel-asset .illustration-icon-grid-container-block.container,.carousel .carousel-two-column__tab-labels-left .carousel-asset .card-deck-container-block.container,.carousel .carousel-two-column__tab-labels-left .carousel-asset .illustration-icon-grid-container-block.container{padding:0px;}.carousel .carousel-asset-code .carousel-asset-code-block{background-image:url(https://assets.website-files.com/5d35f5b2989a23dd99c4cb9a/5dd5be9fcd567c46f05e5544_image-dots-browser-16-colored.svg);background-repeat:no-repeat;background-position:32px 32px;background-color:var(--color-light-gray);height:500px;overflow-y:scroll;padding:40px 32px 32px;position:relative;-moz-box-shadow:0 10px 20px 0 rgba(152,162,179,0.25);-webkit-box-shadow:0 10px 20px 0 rgba(152,162,179,0.25);-o-box-shadow:0 10px 20px 0 rgba(152,162,179,0.25);-ms-box-shadow:0 10px 20px 0 rgba(152,162,179,0.25);box-shadow:0 10px 20px 0 rgba(152,162,179,0.25);}.carousel .carousel-asset-code .carousel-asset-code-block .react-tabs__tab-panel{height:484px;overflow:auto;width:100%;}.carousel .carousel-asset-code .prettyprint{background-color:var(--color-light-gray);border:0px none !important;left:0;margin:20px auto 0;padding:16px;position:absolute;right:0;width:675px;}.carousel .carousel-asset-code .prettyprint ol li{background:none;}.carousel .carousel-asset-code .prettyprint .linenums{color:#999;display:contents;}.carousel .carousel-asset-code .prettyprint code{display:inline-block;left:0;overflow:hidden;position:relative;vertical-align:top;white-space:pre-wrap;width:90%;word-break:break-word;}.carousel .carousel-description{width:auto;max-width:854px;text-align:center;padding:0px 16px;margin-right:auto;margin-left:auto;}.carousel .icon-text-card-deck .container{padding-left:0px !important;padding-right:0px !important;}.carousel .icon-text-card.card .card-body{text-align:left;}.carousel .icon-text-card.card .card-body h3{font-size:24px;line-height:28px;}.carousel .icon-text-card.card .card-footer{text-align:left;}.carousel .icon-text-card.card .card-footer .card-footer{margin-top:16px !important;}@media screen and (max-width:991px) and (min-width:768px){.carousel .card.icon-text-card{width:100%;}}@media screen and (max-width:768px){.carousel .carousel .description{width:100%;margin:32px auto 8px auto;}}@media screen and (max-width:575px){.carousel .react-tabs__tab h2{font-size:14px !important;line-height:24px !important;}.carousel .icon-text-card-deck{margin:auto;}}.training .rail>div{position:relative;}.euiComboBox .euiFormControlLayoutIcons{position:absolute !important;}.euiComboBox .euiFormControlLayoutCustomIcon--clickable{border:0;background-color:transparent;padding:0;}.euiComboBox .euiFormControlLayoutClearButton{display:flex;justify-content:center;align-items:center;border:1px solid #98A2B3;}.css-1yifmy7-euiBadge-hollow{display:flex;align-items:center;}.euiBadge__iconButton.css-iqdgtj-euiBadge__iconButton-right{border:0;background:transparent;padding:0;}.euiComboBoxOptionsList__rowWrap{border-radius:6px;}.euiComboBoxOptionsList__rowWrap .euiFilterSelectItem{border:0;background:#fff;border-bottom:1px solid #EEF2F7;font-size:14px;font-weight:400;display:flex;align-items:center;}.euiComboBoxOptionsList__rowWrap .euiFilterSelectItem-isFocused{background-color:rgba(0,119,204,0.1);}@media (max-width:767px){.horizontal-scroll-table{width:100vw;overflow-x:auto;}}.comparison-table{max-width:830px;margin:0 auto;}.comparison-table thead{border-bottom:4px solid #000;}.comparison-table th{text-transform:uppercase;font-weight:700;letter-spacing:0.1em;padding:1rem 1.5rem;text-align:center;}.comparison-table td{padding:1rem 1.5rem;}.comparison-table td:not(:first-child){text-align:center;}.comparison-table tbody{font-size:0.875rem;}.comparison-table tbody tr{border-bottom:1px solid #ccc;}.comparison-table tfoot td{width:100%;color:#ccc;}.pricing-card.bg-dark-teal,.list.bg-dark-teal{--bullet-color:var(--color-dark-teal);}.pricing-card.bg-yellow,.list.bg-yellow{--bullet-color:var(--color-yellow);}.pricing-card.bg-elastic-teal,.list.bg-elastic-teal{--bullet-color:var(--color-elastic-teal);}.pricing-card.bg-pink,.list.bg-pink{--bullet-color:var(--color-pink);}.pricing-card.bg-blurple,.list.bg-blurple{--bullet-color:var(--color-blurple);}.list.dark-teal{--bullet-color:var(--color-dark-teal);}.list.yellow{--bullet-color:var(--color-yellow);}.list.elastic-teal{--bullet-color:var(--color-elastic-teal);}.list.pink{--bullet-color:var(--color-pink);}.list.blurple{--bullet-color:var(--color-blurple);}.serverless-pricing-table{width:100%;border-spacing:32px 0;table-layout:fixed;height:1px;}.serverless-pricing-table h4{letter-spacing:-0.04em;line-height:1.1;}.serverless-pricing-table tr{height:100%;}@media (min-width:767px){.serverless-pricing-table tr{border-bottom:1px solid var(--color-dark-gray);}}.serverless-pricing-table tr:last-child{border:none;}@media (max-width:767px){.serverless-pricing-table tr:not(:first-of-type){display:none;visibility:hidden;}}.serverless-pricing-table th{padding:0 0.5rem;}.serverless-pricing-table th:first-child{padding:0 1rem 1.5rem;}.serverless-pricing-table th:last-child{padding-right:0;}.serverless-pricing-table td,.serverless-pricing-table th{padding:0 0.5rem;vertical-align:top;height:100%;}.serverless-pricing-table td:first-child,.serverless-pricing-table th:first-child{padding:1.5rem 1rem 0 1.5rem;}@media (max-width:767px){.serverless-pricing-table td:first-child,.serverless-pricing-table th:first-child{border-bottom:none;padding:0;margin:0;}}.serverless-pricing-table td:last-child,.serverless-pricing-table th:last-child{padding-right:0;}@media (max-width:767px){.serverless-pricing-table td,.serverless-pricing-table th{display:block;height:initial;padding:0;margin:0 0 1.5rem;border-bottom:1px solid var(--color-dark-gray);}}.serverless-pricing-table td.feature-label,.serverless-pricing-table th.feature-label{font-family:'MierB','Inter',Arial,sans-serif;font-size:1.25rem;font-weight:700;letter-spacing:-0.02em;padding:1.5rem 1rem 1.5rem 1.5rem;}.serverless-pricing-table td.feature-label span:last-child,.serverless-pricing-table th.feature-label span:last-child{margin-top:6px;display:block;font-weight:normal;}.serverless-pricing-table td.feature,.serverless-pricing-table th.feature{vertical-align:middle;text-align:center;}.serverless-pricing-table td.feature .card-content,.serverless-pricing-table th.feature .card-content{padding:24px 0;height:100%;display:flex;flex-direction:column;justify-content:center;}.serverless-pricing-table td.feature .card-content *,.serverless-pricing-table th.feature .card-content *{vertical-align:middle;}.serverless-pricing-table .card-content{border-left:1px solid var(--color-dark-gray);border-right:1px solid var(--color-dark-gray);background:#fff;padding:0 0.5rem;}.serverless-pricing-table .card-content__container{padding:0 0.5rem 1.5rem;display:flex;flex-flow:column nowrap;align-items:center;justify-content:space-between;}.serverless-pricing-table .card-content__container p{margin:0;}.serverless-pricing-table .card-content__container .button{width:max-content;margin:0 auto;align-self:end;}.serverless-pricing-table .card-content__content{flex:1;display:grid;}.serverless-pricing-table .card-content.header{display:flex;flex-flow:column nowrap;justify-content:space-between;}.serverless-pricing-table .button-unstyled{padding:8px 24px;min-height:50px;display:inline-block;border:2px solid transparent;width:max-content;margin:0 auto;align-self:end;}.serverless-pricing-table .header{padding:0;}.serverless-pricing-table .card-content__header,.serverless-pricing-table .card-content__includes{padding:0 0.5rem;}.serverless-pricing-table .card-content__includes{padding:2rem 0.5rem;border-top:1px solid var(--color-dark-gray);}.serverless-pricing-table .border-bottom{border-bottom:1px solid var(--color-dark-gray);border-bottom-left-radius:16px;border-bottom-right-radius:16px;}.serverless-pricing-table .borderless-bottom{border-bottom:none;}.serverless-pricing-table .pricing-card{border-top-left-radius:16px;border-top-right-radius:16px;height:100%;padding-top:16px;}.serverless-pricing-table .pricing-card .card-label{padding:0.875rem 0;}.serverless-pricing-table .pricing-card .header{height:100%;border-top-left-radius:16px;border-top-right-radius:16px;border-top:1px solid var(--color-dark-gray);}.serverless-pricing-table .topic-heading{color:var(--color-light-ink);font-size:1rem;font-weight:700;line-height:22px;letter-spacing:0.1em;text-transform:uppercase;}.serverless-pricing-table .price{font-family:'MierB','Inter',Arial,sans-serif;font-size:1.75rem;font-weight:700;letter-spacing:-0.04em;margin-top:8px;}.serverless-pricing-table .list{max-width:250px;width:max-content;margin:0 auto;text-align:left;text-indent:-1.5rem;}.serverless-pricing-table .list li{font-weight:normal;margin-bottom:0.75rem;}.serverless-pricing-table .list li:before{content:"✓";position:relative;top:-2px;left:0;display:inline-block;background-color:var(--bullet-color,black);border-radius:50%;border-style:none;height:16px;width:16px;font-size:0.75rem;line-height:normal;color:#fff;padding-top:0;padding-left:3px;margin-right:0.5rem;text-indent:0;}.mobile-container{border-top:1px solid var(--color-dark-gray);margin:2rem 0 0;padding:1rem 0 0;}@media (min-width:767px){.mobile-container{display:none;visibility:hidden;}}.mobile-container__item{margin:1rem 0;}.mobile-container .topic-heading{padding-bottom:0.25rem;}.mobile-container__price-heading{font-weight:normal;}.mobile-container__price{font-weight:700;}.card-content--stretch .card-content__includes{min-height:373px;}.feature .pricing{margin:0 0 1rem;}.optional-eyebrow{display:block;font-size:1rem;text-transform:uppercase;color:var(--color-dark-teal);letter-spacing:0.1rem;}.pill>.topic-heading{font-size:0.875rem;}#LbltempCheckBoxforForm{padding-left:20px;}#marketo-fe-form .mktoForm .mktoFieldWrap .mktoCheckboxList{margin:0;}#LbltempCheckbox1{padding-left:20px;}#tempCheckbox1{margin-top:5px;}
Elasticsearchの機能 Elasticsearchは分散型のRESTful検索/分析エンジンです。データを一元的に格納し、あらゆる形とサイズのデータを検索、インデックス、分析することができます。
驚きの高速検索を、マネージドで Elasticsearch Serviceを、14日間無料トライアルでお試しください。クレジットカード情報の入力は必要ありません。
Elasticsearchは、設計段階から分散環境での安全な運用を考慮したプロダクトです。クラスターサイズの変更も思いのまま。ノードを追加するだけです。
クラスタリングと高可用性 クラスターとは、共同ですべてのデータを保有し、全ノードを横断してフェデレーションによるインデキシングと検索を提供する1つ以上のノード(サーバー)の集合です。Elasticsearchのクラスターはプライマリシャードとレプリカシャードの2つを搭載しており、ノードがダウンした場合にフェイルオーバーの役割を果たします。プライマリシャードに問題が生じると、レプリカシャードが代替します。
クラスタリングと高可用性についてさらに詳しく
ノードの自動復旧 意図的であるかを問わず、何らかの理由で任意のノードがクラスターから切り離される場合、複製とシャードのリバランスを活用して、マスターノードに代替されます。この一連のアクションは、各シャードを可能な限りすみやかに、完全に複製することで、データロスからクラスターを保護することを目的としています。
ノードの割り当てについてさらに詳しく
自動のデータリバランス Elasticsearchクラスターのマスターノードは、どのシャードをどのノードに割り当てるか自動的に判断します。さらにマスターノードは、シャードを別のノードへ移動させ、クラスターの再バランス化を図るタイミングも決定します。
自動のデータ再バランス化についてさらに詳しく
分散型スケーラビリティ Elasticsearchは、ニーズに応じて自在にスケールします。データの増加やユースケースの追加、リソースの不足が生じた場合も、運用クラスターにノードを追加するだけ。キャパシティと信頼性を簡単に引き上げることができます。クラスターにノードを追加すると、自動でレプリカシャードが割り当てられ、有事の際も安心です。
分散型スケーラビリティについてさらに詳しく
rack認識 カスタムノード属性を認識属性として使用し、シャードを割り当てる際、Elasticsearchに物理ハードウェアの設定を考慮させることができます。どのノードが同じ物理サーバー(あるいは同じラック、同じゾーン)にあるかをElasticsearch側で把握していれば、プライマリシャードとレプリカシャードを分散させ、障害発生時にすべてのシャードコピーが失われるリスクを最小化することができます。
割り当て認識についてさらに詳しく
クラスター横断レプリケーション クラスター横断レプリケーション(cross-cluster replication、CCR)機能を使って、リモートクラスターのインデックスをローカルクラスターに複製することができます。一般的な運用ユースケースで広く役立ちます。
CCRについてさらに詳しく
データセンター横断レプリケーション Elasticsearchを使用するミッションクリティカルな多くのアプリに欠かせない要件に、データセンター横断レプリケーションがあります。従来は、部分的かつ付加的なテクノロジーで解決されていました。Elasticsearchのクラスター横断レプリケーションなら、データセンター間や、地理的冗長性を目的に、あるいはElasticsearchクラスター間のデータ複製のためにテクノジーを追加する必要はありません。
データセンター横断レプリケーションについてさらに詳しく
Elasticsearchには豊富な管理ツールとAPIが揃っており、データやユーザー、クラスター、運用などを完全に制御できます。
スナップショットからの復元 クラウドのオブジェクトストレージを使ってElasticsearchクラスターのElasticsearchノードとオブジェクトストレージから特定のデータを転送し、シャードレプリケーションやシャード復元に活用することができるようになりました。Elasticsearchノード間でデータ転送を行う方法に比べて、データ転送量とストレージコストを低く抑えることができます。
スナップショットからの復元についてさらに詳しく
インデックスライフサイクル管理 インデックスライフサイクル管理(ILM)によって、ユーザーは4つの各フェーズにインデックスが滞在する期間と、インデックスの各フェーズで実行される一連のアクションのポリシーを定義し、自動化して制御します。データをさまざまなリソースのティアに設置できるため、運用コストのよりきめ細やかな管理を実現します。
ILMについて詳しくはこちら
データティア データティアは、ノードロール属性を使ってデータをHot、Warm、Coldの3つのノードに正式に区分する手法です。ノードロール属性に基づき、ノードのインデックスライフサイクル管理ポリシーも自動的に定義されます。Hot、Warm、Coldの3つのノードロールを割り当てることで、高コスト・高パフォーマンスなストレージから低コスト・低パフォーマンスなストレージへのデータ移動プロセスを大幅にシンプル化、および自動化できます。大切なデータインサイトには、一切影響を生じません。
データティアについてさらに詳しく
スナップショットのライフサイクル管理 バッググラウンドで稼働するスナップショット・マネージャーとして、スナップショットのライフサイクル管理(SLM)APIを使って、Elasticsearchクラスターのスナップショットを撮る間隔を定義できます。SLM専用のUIがあり、SLMポリシーの保持期間を設定したり、スナップショットを自動で作成・削除したり、スケジュールを指定できるようになっています。どのクラスターも適切にバックアップできるだけでなく、顧客とのSLAに従って復旧を実施するために必要な頻度のバックアップを確実に実行することができます。
SLMについて詳しくはこちら
スナップショットと復元 スナップショットとは、実行中のElasticsearchクラスターのバックアップです。個々のインデックスのスナップショットを撮ることも、クラスター全体で撮ることもでき、スナップショットは共有ファイルシステムのレポジトリに格納されます。プラグインを使用し、リモートレポジトリを選択することもできます。
スナップショットと復元についてさらに詳しく
検索可能スナップショット “検索可能スナップショット”は、直接クエリできるスナップショットです。通常のスナップショットを復元する場合と比べて、検索にかかる時間を劇的に短縮できます。各スナップショットインデックスの必要な部分を読み取り専用で活用し、検索リクエストを実行する仕組みです。検索可能スナップショットとColdティアを組み合わせて、Amazon S3やAzure Storage、Google Cloud Storageといったオブジェクトストレージシステムにレプリカシャードをバックアップすると、データストレージコストを大幅に削減できます。もちろん、検索のための完全なアクセスが保たれます。
検索可能スナップショットについてさらに詳しく
データのロールアップ 古いデータを使えるようにしておくと、分析には非常に役立ちます。問題は、膨大な量のデータのアーカイブに費用がかかることでした。したがって膨大な過去データの保持期間を、その有用性よりも、コスト面の制約で決定されることが少なくありませんでした。Elasticのロールアップは、過去データを要約して格納する機能です。分析に使えるように維持しつつ、生データにかかるストレージコストを大きく引き下げます。
ロールアップについてさらに詳しく
変換は、2次元的な表によるデータ構造です。このデータ構造は、インデックス済みデータをより処理しやすくします。変換は、アグリゲーションを通じてデータをエンティティ中心のインデックスにピボットします。データを変換、要約することによって、可視化を可能にするだけでなく、他の機械学習分析に向けたソースとして分析するなど、代替的方法で分析することもできます。
変換について詳しくはこちら
アップグレードアシスタントAPI アップグレードアシスタントAPIを活用すれば、Elasticsearchクラスターのステータスを確認・アップグレードしたり、以前のメジャーバージョンで作成されたインデックスを再インデックスしたりすることができます。Elasticsearchで、次のメジャーバージョンへ移行する際に便利です。
アップグレードアシスタントAPIについて詳しくはこちら
APIキーの管理 APIキーの管理には、ユーザーが独自のキーを管理できる程度にフレキシブルで、個々のロールに応じてアクセスを制限できる機能が必要です。ユーザーは専用UIを使ってAPIキーを作成したり、長い期間Elasticsearchと通信する認証情報として使用したりすることができます。他の多くのソフトウェアでは、自動化スクリプトや自動化ワークフローの統合という形で提供されています。
APIキーの管理についてさらに詳しく
適切なユーザーに適切なアクセス権限を付与する、それがElastic Stackのセキュリティ機能 です。たとえばIT部門や事業部、アプリ開発チームごとに善意のユーザーを管理することで、不正な侵入を防ぐことができます。また、お客様や経営陣にも個別の権限を付与して、Elastic Stackのデータを安全に、安心して共有できます。
Elasticsearchを安全に設定する 設定そのものがセンシティブである場合があります。設定値の保護をファイルシステム権限だけに頼っても、十分に安全とは言えません。このようなユースケースでは、Elasticsearchのキーストアを使ってセンシティブなクラスター設定への望ましくないアクセスを防止できます。また、キーストアにオプションのパスワード保護を追加して、セキュリティを高めることも可能です。
設定を安全に保つ仕様についてさらに詳しく
通信の暗号化 SSL/TLSを用いたトラフィック暗号化や、Node認証証明書をはじめとするテクノロジーで、Elasticsearch Nodeのデータに対するネットワークベースの攻撃を阻止しています。
通信の暗号化について詳しくはこちら
保存データの暗号化 Elastic Stackに保存データを暗号化する設定不要の機能が搭載されているわけではなく、ホストマシンにおけるディスクレベルの暗号化は常に推奨されています。スナップショットの対象についても、保存データが確実に暗号化されていることが必要です。
ロールベースのアクセス制御(RBAC) ロールベースのアクセス制御(RBAC)によって、ロールに権限をアサインし、ユーザーやグループにロールをアサインすることで、ユーザーを認証できます。
RBACについて詳しくはこちら
属性ベースのアクセス制御(ABAC) Elastic StackのSecurityオプションは、属性ベースのアクセス制御(ABAC)メカニズムも備えています。属性を使用して、検索クエリやアグリゲーションがアクセスするドキュメントを制約します。このメカニズムで、ロール定義にアクセスポリシーを導入することが可能です。エンドユーザーは、必要なすべての属性を備える特定のドキュメントしか読み取ることができません。
ABACについてさらに詳しく
フィールドおよびドキュメントレベルのセキュリティ フィールドレベルのセキュリティ対策で、ユーザーが読み取りアクセスを持つフィールドを制限します。ドキュメントベースの読み取りAPIでは、どのフィールドにアクセスを許可するか設定できます。
フィールドレベルのセキュリティについて詳しくはこちら
監査ログ 認証の失敗や拒否された接続など、セキュリティ関連イベントを追跡する監査を有効化することができます。こうしたイベントのログを記録しておくことによって、クラスター上の疑わしいアクティビティを監視し、攻撃が発生した際のエビデンスとして使用することができます。
監査ログについてさらに詳しく
IPフィルター クラスターに追加するノードや、アプリクライアント、ノードクライアント、トランスポートクライアントなどにIPフィルターを追加することができます。ブラックリストに入っているIPアドレスがノードに入ると、セキュリティ機能がElasticsearchへの接続をただちに遮断し、リクエスト処理が停止されます。
IPアドレスまたは範囲
xpack.security.transport.filter.allow: "192.168.0.1"
xpack.security.transport.filter.deny: "192.168.0.0/24"
ホワイトリスト
xpack.security.transport.filter.allow: [ "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4" ]
xpack.security.transport.filter.deny: _all
IPv6
xpack.security.transport.filter.allow: "2001:0db8:1234::/48"
xpack.security.transport.filter.deny: "1234:0db8:85a3:0000:0000:8a2e:0370:7334"
ホスト名
xpack.security.transport.filter.allow: localhost
xpack.security.transport.filter.deny: '*.google.com'
IPフィルターについてさらに詳しく
セキュリティレルム Elastic Stackのセキュリティオプションで実行されるユーザー認証は、レルムと、1つ以上のトークンに基づく認証サービスを使用します。レルムは認証トークンに基づいてユーザーを解決、認証する役割を果たします。Elastic Stackのセキュリティオプションでは、多数の内蔵型レルムが提供されています。
セキュリティレルムについて詳しくはこちら
シングルサインオン(SSO) Elastic StackはバックエンドサービスにElasticsearchを使用しており、KibanaへのSAMLシングルサインオン(SSO)に対応しています。SAML認証の導入で、OktaやAuth0といった外部IDプロバイダーを使ったKibanaへのログインが可能になります。
SSOについて詳しくはこちら
Elasticsearchのクエリ機能をフルパワーで活用するElastic Stackのアラート機能 なら、データの重要な変化を見逃しません。つまり、Elasticsearchでクエリできるものは何でも通知可能です。
高可用でスケーラブルなアラート アラートのニーズ対応で、Elastic Stackが組織の規模を問わず信頼されているのには、理由があります。あらゆるソース、あらゆるフォーマットのデータを確実かつ安全にインジェストすることで、アナリストは重要なデータをリアルタイムに検索、分析、可視化できます。すべてにカスタム可能で、信頼性の高いアラートを設定できます。
アラートについて詳しくはこちら
メール、IBM Resilient、Jira、Microsoft Teams、PagerDuty、ServiceNow、xMatters、Slackに対応する内蔵の統合機能で、アラートをリンク付けできます。Webフックアウトプットを経由して、あらゆるサードパーティのシステムを連携させることも可能です。
アラートの通知オプションについて詳しくはこちら
Elasticsearchなら、ユーザーが「使いやすい」と感じる方法で自由にデータを扱うことができます。各種のRESTful APIや言語クライアント、堅牢なDSLを備え、SQLにも対応。あらゆる方法をスムーズに実行できる柔軟性があります。
言語クライアント Elasticsearchは標準のRESTful APIとJSONを使用します。さらにElasticが開発・保守するクライアントライブラリがJava、Python、.Net、SQL、PHPといった多数の言語で用意されているほか、コミュニティによるクライアントもあります。無限の可能性を持つElasticsearch。あなたの自由なアイデアを妨げません。
使用可能なクライアントプログラミング言語を探す
Elasticsearch DSL ElasticsearchはJSONベースでクエリを定義する完全なクエリDSL(ドメイン固有言語、domain-specific language)を提供しています。クエリDSLはパワフルな検索オプションとして、用語/フレーズのマッチング、あいまい検索、ワイルドカード、正規表現、ネストクエリ、ジオクエリなどを含む全文検索に対応しています。
Elasticsearch DSLについてさらに詳しく GET /jp/_search
{
"query": {
"match" : {
"message" : {
"query" : "this is a test",
"operator" : "and"
}
}
}
}
Elasticsearch SQL Elasticsearch SQLは、ElasticsearchでリアルタイムにSQL風のクエリを実行できる機能です。クライアントはRESTインターフェース、コマンドライン、JDBCのいずれでもSQLを使用することができ、Elasticsearch内でデータ検索やアグリゲーションがネイティブに実行されます。
Elasticsearch SQLについてさらに詳しく
Event Query Language(EQL) 連続のイベントをクエリして、特定の条件に一致させる機能を備えるEvent Query Language(EQL)は、セキュリティ分析をはじめとするユースケースを目的として開発されています。
EQLについてさらに詳しく
JDBCクライアント Elasticsearch SQL JDBCドライバーは、豊富で包括的な仕様を備えたElasticsearchのためのJDBCドライバーです。JDBCコールをElasticsearch SQLに転換するタイプ4ドライバー(プラットフォーム非依存でスタンドアローン、データベース直結の純粋なJavaドライバー)です。
JDBCクライアントについてさらに詳しく
ODBCクライアント Elasticsearch SQL ODBCドライバーは、Elasticsearchのための多機能な3.80 ODBCドライバーです。コアレベルドライバーとしてElasticsearch SQL ODBC APIを通じてアクセスできるすべての機能を提供し、ODBCコールをElasticsearch SQLに変換します。
ODBCクライアントについてさらに詳しく
Elasticsearch向けTableauコネクター Tableau DesktopやTableau Serverのユーザーは、Elasticsearch向けTableauコネクターを使うことでElasticsearchのデータにより簡単にアクセスできます。
Tableauコネクターをダウンロード
コマンドラインでElasticsearchのセキュリティを設定したり、その他のタスクを実行したりするためのツールが数多くあります。
CLIツールを探す
Elasticsearchが提供する包括的でパワフルなREST APIを通じて、クラスターを操作することができます。
ドキュメントAPI ドキュメントAPIを使って、個々のドキュメント上で、または複数のドキュメントを横断してCRUD操作(作成、読み取り、アップデート、削除)を実行することができます。
使用可能なドキュメントAPIを探す
検索API Elasticsearchの検索APIを活用して、単なる全文検索以上の機能を実装することができます。タームやフレーズ、自動入力などの推測/提案機能の実装に役立つだけでなく、表示順位の評価や、検索でドキュメントが返された、または返されなかった理由のフィードバックを実施することもできます。
検索APIについてさらに詳しく
アグリゲーションAPI アグリゲーションフレームワークが、検索クエリに基づいてアグリゲーション済みデータを提供します。たとえるなら、アグリゲーションと呼ばれるシンプルなブロックを用意しておき、それを組み合わせて複雑なデータのサマリーを構築する、そんな仕組みです。アグリゲーションを、一連のドキュメントから分析的な情報を取得する作業の単位としてとらえることができます。
使用可能なアグリゲーションAPIを探す
メトリックアグリゲーション
バケットアグリゲーション
パイプラインアグリゲーション
マトリックスアグリゲーション
累積基数アグリゲーション
ジオヘクスグリッドアグリゲーション
インジェストAPI 各種のインジェストAPIを使ってデータパイプラインでCRUD操作を実行したり、シミュレートパイプラインAPIを使って一連のドキュメントに対し特定のパイプラインを実行したりできます。
使用可能なインジェストAPIを探す
管理API 豊富な管理系APIを使用し、プログラムコードからElasticsearchクラスターを管理できます。インデックスとマッピングの管理や、クラスターとノードの管理、ライセンスとセキュリティの管理など、幅広い管理系APIが揃っています。結果を「ヒトがわかる言語」の形式にするcat APIもおすすめです。
オープンソースで言語不問。プラグインと統合を使って、Elasticsearchの機能性を手軽に拡張することができます。
Elasticsearch-Hadoop
Apache Hadoop向けElasticsearch(Elasticsearch-Hadoop、ES-Hadoop)は、無料かつオープンな独立型、自己充足型の小型ライブラリです。ES-Hadoopを使うと、HadoopジョブでElasticsearchを操作することができます。Hadoopデータに役立つダイナミックな検索アプリケーションを手軽に構築したり、全文検索や、地理空間情報検索、アグリゲーション機能を使った深く遅延の少ない分析を実行したりできます。
ES-Hadoopについてさらに詳しく
Apache Hive Elasticsearch for Apache Hadoopは、Apache Hiveを全面的にサポートしています。Apache Hiveは、手軽なデータ要約、アドホッククエリ、Hadoop互換ファイルシステムに格納された大規模データセットの分析を実施するHadoop向けウェアハウスシステムです。
Apache Hiveの統合についてさらに詳しく
Apache Spark Elasticsearch for Apache Hadoopは、高速な汎用クラスターコンピューティングシステムのApache Sparkを全面的にサポートしています。Java、Scala、Pythonの高レベルAPIと、一般的な実行グラフをサポートする最適化エンジンを提供します。
Apache Sparkの統合についてさらに詳しく
プラグインと統合機能
無料かつオープンで言語不問。プラグインと統合を使って、Elasticsearchの機能性を手軽に拡張することができます。プラグインは、ユーザーがカスタマイズした方法でElasticsearchのコア機能を拡張します。統合とは、Elasticsearchを使いやすくする外部ツールやモジュールのことです。
使用可能なElasticsearchプラグインを探す
API機能拡張プラグイン
アラートプラグイン
分析プラグイン
ディスカバリープラグイン
インジェストプラグイン
管理プラグイン
マッパープラグイン
セキュリティプラグイン
スナップショット/レポジトリ復元プラグイン
格納プラグイン
パブリッククラウド、プライベートクラウド、またはハイブリッドでも。Elasticsearchを簡単にデプロイして管理できます。
ダウンロードとインストール 始め方は非常に簡単です。アーカイブやパッケージマネージャーから、ElasticsearchとKibanaをダウンロード・インストール。すぐにデータをインデックスしたり、分析、可視化することができます。機械学習やセキュリティ、グラフ分析などの有償オプション(プラチナ)はデフォルトの配布に含まれており、30日間無料でお試しいただけます。
Elastic Stackをダウンロード
Elastic Cloud クラウドでElasticプロダクトを手軽にデプロイ、運用、スケーリングするSaaSとして、導入数が増えているElastic Cloud。使いやすいマネージドのElasticsearchエクスペリエンスとして、またパワフルですぐに開始できる検索ソリューションとして、Elastic CloudはElasticプロダクトをシームレスに導入する出発点となります。Elastic Cloudのすべてのプロダクトを14日間無料でお試しください。クレジットカードの登録は必要ありません。
Elastic Cloudを使いはじめる
Elastic Cloud Enterprise(ECE) Elastic Cloud Enterprise(ECE)は規模や環境を問わず、ElasticsearchやKibanaをプロビジョニング、管理、監視。すべての管理が、一つのコンソールで完結します。ElasticsearchやKibanaは、物理サーバー、仮想環境、プライベートクラウド、パブリッククラウド内のプライベート空間、またはパブリッククラウド(Google、Azure、AWSなど)からお好きな環境に展開できます。
30日間の無料トライアルでECEをお試しください
Elastic Cloud on Kubernetes Kubernetes Operatorのパターンに基づいて開発されたElastic Cloud on Kubernetes(ECK)は、Kubernetesの基本的なオーケストレーション機能を拡張することにより、KubernetesでのElasticsearchやKibanaの設定/管理をサポートします。Elastic Cloud on Kubernetesを使うと、KubernetesでElasticsearchを実行するためのデプロイ、アップグレード、スナップショット、スケーリング、高可用性、セキュリティなどのプロセスを単純化することができます。
Elastic Cloud on Kubernetesを使ったデプロイ
あらゆる方法でデータをElastic Stackに入れることができます。RESTful APIを使えるほか、クライアントプログラミング言語各種、インジェストノード、軽量なシッパー、あるいはLogstashを使うことも可能。サポート言語リストに拘束されることがありません。オープンソースだから、インジェストするデータタイプにも制限はありません。特定のデータタイプをシッピングする必要がある場合も、カスタムのインジェストメソッドの構築に必要となるライブラリと手順が揃っています。成果をコミュニティにシェアすることもできます。同じメソッドを必要とする人のために、公開することが可能です。
クライアントとAPI Elasticsearchは標準のRESTful APIとJSONを使用します。さらにElasticが開発・保守するクライアントライブラリがJava、Python、.Net、SQL、PHPといった多数の言語で用意されているほか、コミュニティによるクライアントもあります。無限の可能性を持つElasticsearch。あなたの自由なアイデアを妨げません。
使用可能なクライアントプログラミング言語とAPIを探す
インジェストノード Elasticsearchが提供する多彩なノードタイプの1つに、データ投入専用のノードがあります。インジェストノードは1つ以上の投入プロセッサーで構成されたパイプラインの事前処理を実行することができます。投入プロセッサーの動作タイプと必要なリソースにより、特定のタスクのみ実行する投入専用ノードを使う方がよい場合があります。
インジェストノードについてさらに詳しく
Beats Beatsは、エージェントとしてサーバーにインストールできるオープンソースのデータシッパー。運用に関するデータをElasticsearchやLogstashに送ります。一般的なログやメトリック、その他さまざまなタイプのデータを捉えることができます。
Beatsについてさらに詳しく
Logstash Logstashは、リアルタイムでパイプライン処理に対応するオープンソースのデータ収集エンジンです。Logstashは異なるソースから動的にデータを集め、正規化して指定の送信先に届けます。あらゆるデータをクレンジングし、アクセシブルになるよう整形。下流工程にある高度な分析や可視化など、幅広いユースケースで使えるデータにします。
Logstashについてさらに詳しく
ユースケースに解決を必要する具体的な課題がある場合、コミュニティBeatの活用をおすすめしています。Elasticは、そのプロセスをシンプル化するインフラを用意しました。libbeatライブラリにすべてGoで記述されているAPIが提供されています。どのBeatsでも、このAPIを使用してElasticsearchにデータをシッピングしたり、入力オプションの設定や、ロギングの実装などを行うことができます。
Beats開発者向けガイドはこちら Beatsへのコントリビューションを行うコミュニティは100以上。Cloudwatchログおよびメトリックや、GitHubアクティビティ、Kafkaに関するトピックスからMySQL、MongoDB Prometheus、Apache、Twitterまで、さまざまなエージェントがあります。
コミュニティが開発したBeatsを探す
アナライザーやトークナイザー、フィルター、エンリッチメントをはじめ、各種オプションが豊富に揃うElasticsearchなら、生データから貴重な情報を引き出せます。
Elastic Common Schema Elastic Common Schema(ECS)を使って、多様なソースを持つデータを一元的に分析できます。検知ルール、機械学習ジョブ、ダッシュボード、その他のセキュリティコンテンツを幅広く適用できるだけでなく、検索範囲を精緻に絞り込むことができ、フィールド名も覚えやすくなります。
Elastic Common Schemaに関するビデオを視聴する
各種プロセッサー Ingestノードを使用して、実際のドキュメントをインデックスする前にドキュメントを事前処理することができます。Ingestノードはバルクリクエストやインデックスリクエストを遮断し、ドキュメントを変換してから再びバルクAPIまたはインデックスAPIにドキュメントを渡します。Ingestノードにはappend、convert、date、dissect、drop、fail、grok、join、emove、set、split、sort、trimほか、25種類以上のプロセッサーがあります。
投入プロセッサーについてさらに詳しく
各種アナライザー 分析とは、テキストの変換プロセスです。Eメールにかならず"本文"がついてくるのと同じです。検索のために倒置されたインデックスと、トークンやタームを切り離すことはできません。内蔵のアナライザーを分析用のアナライザーとして使うことも、インデックスごとに、トークナイザーやフィルターを組み合わせて作成したカスタムアナライザーを定義して使用することもできます。
データアナライザーについてさらに詳しく 例:標準アナライザー (デフォルト)
インプット:"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
Output: the
2
quick
brown
foxes
jumped
over
the
lazy
dog's
bone
各種トークナイザー トークナイザーは文字のストリームを受け取り、個別のトークン(通常は個別の単語)に分解してから、トークンのストリームを出力します。トークナイザーは各タームの順序や位置も記録しています(フレーズや単語の近接性クエリに使用)。先頭と末尾の文字はタームが表現する元の単語から控除されます(検索スニペットの強調に使用)。Elasticsearchは多数のトークナイザーを搭載しており、そのトークナイザーを使ってカスタムアナライザーを構築することもできます。
トークナイザーについてさらに詳しく 例:Whitespace tokenizer
インプット:"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
アウトプット:The
2
QUICK
Brown-Foxes
jumped
over
the
lazy
dog's
bone.
各種フィルター トークンフィルターは、トークナイザーから来るトークンのストリームを受け取り、修正(例:小文字に変える)や、削除(例:ストップワードを除外する)、追加(例:同義語)を行うことができます。Elasticsearchは多数のトークンフィルターを搭載しており、そのトークンフィルターを使ってカスタムアナライザーを構築することもできます。
トークンフィルターについてさらに詳しく 文字フィルターを使って、トークナイザーに渡される前の文字を、事前処理することができます。文字フィルターは、元のテキストを文字のストリームとして受け取り、文字を追加、削除、または変更してそれを変換します。Elasticsearchは多数の文字フィルターを搭載しており、その文字フィルターを使ってカスタムアナライザーを構築することもできます。
文字フィルターについてさらに詳しく
言語アナライザー 検索は、母国語で。Elasticsearchは30以上の言語アナライザーを提供しており、ロシア語やアラビア語、中国語などラテン文字を使用しない言語にも対応します。
使用可能な言語フィルターを探す
動的マッピング フィールドタイプやマッピングタイプを、事前に定義する必要はありません。ドキュメントをインデックスする際に、動的マッピング機能が新しいフィールド名を自動で追加してくれます。
動的マッピングについてさらに詳しく
一致エンリッチプロセッサー 一致投入プロセッサーを使うことにより、投入時にデータを参照して、エンリッチ済みデータをプルする最適なインデックスを指定することができます。特に、データに要素を追加するプロセスが不可欠なBeatsのユーザーに便利です。BeatsからLogstashにピボットする必要がなく、インジェストパイプラインだけで処理することが可能になります。また一致エンリッチプロセッサーによるデータの正規化は、高度な分析や一般的なクエリにも役立ちます。
一致エンリッチプロセッサーについてさらに詳しく
地理空間一致エンリッチプロセッサー 地理空間一致エンリッチプロセッサーは、地理データを活用して検索とアグリゲーションの機能性を高めます。クエリやアグリゲーションを地理座標で定義する必要がありません。一致エンリッチプロセッサーと同様に、投入時にデータを参照して、エンリッチ済みデータをプルする最適なインデックスを判断することができます。
地理空間一致エンリッチプロセッサーについてさらに詳しく
Elastic Stackは、あらゆるユースケースに対応するパワフルなソリューションです。中核となる高度な検索機能のほか、ドキュメントストレージにも、時系列分析やメトリック分析、地理空間分析のための最適なツールにもなります。多様なニーズに応えるフレキシブルな設計です。
データタイプ Elasticsearchは、ドキュメントのフィールドについてさまざまなデータタイプをサポートしています。また、各データタイプについて複数のサブタイプも提供しています。それが、種類を問わず、データを可能な限り効率的かつ効果的に格納、分析、活用できる理由です。Elasticsearchで最適に扱うことができるデータタイプに、次のようなものがあります。
Elasticsearchがサポートするデータタイプ
テキスト
シェイプ
数
ベクター
ヒストグラム
日時/時系列
フラット化されたフィールド
地理座標/ジオシェイプ
非構造化データ(JSON)
構造化データ
全文検索(転置インデックス) Elasticsearchは、超高速の全文検索を実現する目的で開発された倒置インデックスと呼ばれる構造を使用します。倒置インデックスは、ドキュメントに出現するユニークなすべての単語を列挙したリストと、各単語がどのドキュメントに出現するかを列挙したリストで構成されます。倒置インデックスを作成する際、はじめに各ドキュメントのコンテンツフィールドを単語(ターム、またはトークンと呼ばれます)に分割します。次に、ユニークなすべての単語を列挙し、並べ替えたリストを作成します。最後に、各タームが出現するドキュメントをリストアップします。
倒置インデックスについてさらに詳しく
ドキュメント格納(非構造化データ) Elasticsearchは、構造化をデータ投入や分析の要件としていません(構造化されていれば、スピードが向上します)。シンプルに使いはじめることができる設計で、ドキュメントストアとしても効率的です。ElasticsearchはNoSQLデータベースではありませんが、類似の機能性を備えています。
動的マッピングについてさらに詳しく
時系列/分析(列での格納) 転置インデックスでクエリを実行すると、検索タームをすばやく参照できます。しかし、並べ替えやアグリゲーションを実行するには、別のデータアクセスパターンが必要です。タームを参照してドキュメントを見つける代わりに、ドキュメントを参照してフィールドにあるタームを探せるようにしなければなりません。ドキュメントの値は、インデックス時にElasticsearchのオンディスクデータ構造になっています。そのため前述のデータアクセスパターンを使うことができ、検索を列で実行することが可能です。Elasticsearchが時系列とメトリック分析にすぐれた能力を発揮できる理由もここにあります。
ドキュメント値についてさらに詳しく
地理空間(BKDツリー) ElasticsearchはLuceneでBKDツリー構造を使用し、地理空間データを格納します。これにより、地理座標 (緯度・経度)とジオシェイプ (四角形・ポリゴン)のどちらも効率的に分析することができます。
セキュリティは、クラスターレベルに限った問題ではありません。Elasticsearchには、フィールドレベルでデータの安全性を保つ仕組みが備わっています。
フィールドとドキュメントレベルのAPIセキュリティ フィールドレベルのセキュリティ対策で、ユーザーが読み取りアクセスを持つフィールドを制限します。ドキュメントベースの読み取りAPIで、どのフィールドにアクセスを許可するか定めることが可能です。
フィールドレベルのセキュリティについてさらに詳しく
保存データの暗号化 Elastic Stackに保存データを暗号化するメニューは搭載されていませんが、ホストマシンにおけるディスクレベルの暗号化は常に推奨されています。スナップショットの対象についても、保存先データが確実に暗号化されていることが必要です。
Elasticsearchのクラスターやノード、インデックス、シャード、そしてデータ自体も、完全に管理することができます。
クラスター化インデックス クラスターとは、共同ですべてのデータを保有し、全ノードを横断してフェデレーションによるインデキシングと検索を提供する1つ以上のノード(サーバー)の集合です。このアーキテクチャーでは、簡単に水平方向へのスケールを行うことができます。Elasticsearchはクラスター管理のための包括的でパワフルなREST APIとUIを提供しています。
クラスター化インデックスについてさらに詳しく
データスナップショットと復元 スナップショットとは、実行中のElasticsearchクラスターのバックアップです。個々のインデックスのスナップショットを撮ることも、クラスター全体で撮ることもでき、スナップショットは共有ファイルシステムのレポジトリに格納されます。プラグインを使用し、リモートレポジトリを選択することもできます。
スナップショットと復元についてさらに詳しく
ロールアップインデックス 古いデータを使えるようにしておくと、分析には非常に役立ちます。問題は、膨大な量のデータのアーカイブに費用がかかることでした。したがって膨大な過去データの保持期間を、その有用性よりも、コスト面の制約で決定されることが少なくありませんでした。Elasticのロールアップは、過去データを要約して格納する機能です。分析に使えるように維持しつつ、生データにかかるストレージコストを大きく引き下げます。
ロールアップについてさらに詳しく
Elasticsearchは、パワフルな全文検索機能で広く知られています。中核となる転置インデックスが高速処理を実現し、調整可能な関連性スコアリングや高度なクエリDSL、幅広い検索拡張など、機能性にすぐれています。
倒置インデックス Elasticsearchは、超高速の全文検索を実現する目的で開発された倒置インデックスと呼ばれる構造を使用します。倒置インデックスは、ドキュメントに出現するユニークなすべての単語を列挙したリストと、各単語がどのドキュメントに出現するかを列挙したリストで構成されます。倒置インデックスを作成する際、はじめに各ドキュメントのコンテンツフィールドを単語(ターム、またはトークンと呼ばれます)に分割します。次に、ユニークなすべての単語を列挙し、並べ替えたリストを作成します。最後に、各タームが出現するドキュメントをリストアップします。
倒置インデックスについてさらに詳しく
ランタイムフィールド ランタイムフィールドは、クエリ時にデータを要求する(schema on readの)フィールドです。ドキュメントのインデックス後を含むあらゆるタイミングで作成、修正でき、クエリの一部として定義できます。ランタイムフィールドはインデックス済みフィールドと同じインターフェースでクエリにエクスポーズされます。フィールドはデータストリーム中の一部のインデックスのランタイムフィールドにすることも、データストリーム中の他のインデックスのインデックス済みフィールドにすることも可能で、かつ、どのフィールドを使うかをクエリ側で認識する必要はありません。インデックス済みフィールドを使うとクエリを最適なパフォーマンスで実行できるのに対し、ランタイムフィールドにはインデックス済みドキュメントのデータ構造を後からフレキシブルに変更できるメリットがあり、補完的に使うことができます。
ランタイムフィールドについてさらに詳しく
ランタイムフィールドのルックアップ ランタイムフィールドのルックアップを用いると、ドキュメントをリンクする両方のインデックスにキーを定義することにより、ルックアップインデックスからの情報をプライマーインデックスからの結果と柔軟に結びつけることができます。この機能は、ランタイムフィールドと同様、クエリ時に用いられ、柔軟なデータエンリッチメントを可能にします。
ランタイムフィールドについてさらに詳しく
クラスター横断検索 クラスター横断検索(cross-cluster search、CCS)で、ノードを複数のクラスターを横断する連携クライアントのように実行させることができます。クラスター横断検索ノードは、リモートクラスターに直接は加わりません。ほとんど負荷をかけずにリモートクラスターへ接続し、連携された検索リクエストを実行します。
CCSについてさらに詳しく
関連性スコアリング マッチするドキュメントのスコアを定義するのが類似度(関連性スコアリング/順位付けモデル)です。デフォルトで、ElasticsearchはBM25類似度を使用します。これはTF/IDFベースの高度な類似度で、(名前など)短いフィールドに最適なtf正規化に内蔵されています。さらにこの他にも、多数の類似度オプションを使用することができます。
類似度モデルについてさらに詳しく
ベクトル検索(ANN) HNSWアルゴリズムに基づく近似最近傍(ANN)のサポートを新たに開始したLucene 9を再構築し、_knn_search APIエンドポイントを導入しました、ベクトル類似度を活用し、よりスケーラブルで高パフォーマンスな検索を実行できます。そのからくりは、再現率とパフォーマンスのトレードオフです。すなわち、再現率をわずかに犠牲にすることで、(既存の総当たり式ベクトル類似度メソッドに比べた場合に)非常に大規模なデータセットではるかにすぐれたパフォーマンスを実現させています。
ベクトル検索についてさらに詳しく
Query DSL 全文検索を実行するには、頼れるクエリ言語が必要です。ElasticsearchはJSONベースでクエリを定義する完全なクエリDSL(ドメイン固有言語、domain-specific language)を提供しています。シンプルなクエリでタームやフレーズをマッチさせることができ、複数のクエリの組み合わせに対応する複合クエリを開発することも可能です。クエリ時にフィルターを適用して、関連性スコアの算出前にドキュメントを除外することもできます。
ElasticsearchクエリDSLについてさらに詳しく
非同期検索 非同期検索APIを使うと、長時間かかるクエリをバックグラウンドで実行できます。クエリの進捗を把握しながら、生成された順に結果を部分的に取得して利用できます。
非同期検索についてさらに詳しく
強調表示 強調表示機能は、検索結果から1つ以上のフィールドの文字列をハイライトします。クエリがマッチしている箇所が一目でわかります。強調表示をリクエストすると、レスポンスに強調表示要素が追加され、強調表示されたフィールドとフラグメントを含む検索ヒット部分を示します。
強調表示についてさらに詳しく
自動入力 入力予測により、自動入力機能や、入力と同時に検索結果を表示するエクスペリエンスが提供されています。エンドユーザーの入力と同時に関連性の高い結果へ導くナビゲーターとなり、検索精度も高くなります。
自動入力についてさらに詳しく
入力予測 検索中に「もしかして~ですか?」と提案する、フレーズの入力予測機能を追加できます。ngram言語モデルに基づいて重み付けされた個別のトークンは使用しません。用語の入力予測機能に付加的なロジックを構築することにより、完全に修正されたフレーズを選択します。この入力予測機能は、共起性と頻度に基づいて取り上げるトークンを決定にすぐれた能力を発揮します。
入力予測についてさらに詳しく
修正(スペルチェック) 編集スペルチェックは、編集距離からタームを提案する予測機能を応用しています。提案されるテキストはあらかじめ分析されており、提案されるタームは、分析されたテキストトークンごとに出力されます。
修正についてさらに詳しく
パーコレーター クエリを使ってインデックスに格納されたドキュメントを探す、というのが標準的な検索モデルです。それとは対照的に、パーコレーターを使ってインデックスに格納されたクエリにドキュメントをマッチさせることができます。パーコレート
クエリは一部にドキュメントを含んでおり、そのドキュメントをインデックスに格納されたクエリとマッチさせるために使用します。
パーコレーターについてさらに詳しく
クエリプロファイラー/オプティマイザー このプロファイルAPIは、検索リクエストにおける個々のコンポーネントの実行について、詳しいタイミングに関する情報を提供します。低レベルで検索リクエストが実行された方法に関する洞察が提供されるため、特定のリクエストが遅延した理由を把握したり、改善措置を講じることができます。
プロファイルAPIについて詳しくはこちら
動的にアップデート可能な同義語 アナライザーリロードAPIを使って、同義語の定義の再読み込みを開始することができます。設定済みの同義語ファイルに含まれるコンテンツを再読み込みし、フィルターが使用する同義語の定義を更新します。_reload_search_analyzers APIは1つ以上のインデックスで実行することができ、設定済みのファイルに含まれる同義語の再読み込みをトリガーします。
アナライザーリロードAPIについてさらに詳しく
結果のピン留め ドキュメントを指定して、クエリに一致する結果の中で優先度を上げることができます。ある検索で"オーガニック"に返される結果に比べ、精選されたドキュメントを優先させて検索ユーザーをガイドする目的などに使うことができます。優先された("ピン留め")されたドキュメントは、_idフィールドに格納されるドキュメントIDを使って特定することができます。
結果のピン留めについてさらに詳しく
検索は「最初の一歩」です。Elasticsearchのパワフルな分析機能を使って、欲しいデータを入手したり、より深い意味を見出してみましょう。アグリゲーション結果の表示や、ドキュメント間の関連性分析、閾値ベースのアラート設定といった高度な作業も、土台となるパワフルな検索のおかげで簡単に行えます。
アグリゲーション アグリゲーションフレームワークが、検索クエリに基づいてアグリゲーション済みデータを提供します。たとえるなら、アグリゲーションと呼ばれるシンプルなブロックを用意しておき、それを組み合わせて複雑なデータのサマリーを構築する、そんな仕組みです。アグリゲーションを、一連のドキュメントから分析的な情報を取得する作業の単位としてとらえることができます。
アグリゲーションについてさらに詳しく
メトリックアグリゲーション
バケットアグリゲーション
パイプラインアグリゲーション
マトリックスアグリゲーション
ジオヘクスグリッドアグリゲーション
ランダムサンプラーアグリゲーション
グラフ探索 グラフ探索APIを使って、Elasticsearchインデックス中のドキュメントや用語に関する情報を抽出/要約することができます。グラフ探索APIについて理解するベストな方法は、Kibanaでグラフを使った関係性の探索を行ってみることです。
グラフ探索APIについてさらに詳しく
Elasticの機械学習 は、トレンドや周期性などからデータの振る舞いを自動的に、リアルタイムにモデル化し、すばやく問題を特定して原因分析を手助けします。さらに、誤検出を防ぎます。
時系列データによる将来予測 Elasticの機械学習は、データの正常な動作に関するベースラインを作成します。この情報を活用すれば、未来の動作を推定できます。未来の特定の日時の、時系列中の値を予測する、またはある時系列中の値が未来に発生する確立を推定する、といった使い方が可能です。
予測について詳しくはこちら
時系列データの異常検知 Elasticの機械学習機能は、データの正常な動作の正確なベースラインを作成し、そのデータの異常なパターンを特定することによって時系列データ分析を自動化します。異常が検知され、スコア付けされるだけではありません。独自の機械学習アルゴリズムを使用して、データ中にある統計的に重要な影響要因への関連付けまで実行します。
異常検知について詳しくはこちら
異常の通知 アラートに教師なしの機械学習を組み合わせて、ルールや閾値の定義が難しい異常を検知しましょう。アラートフレームワークの異常スコアを活用し、問題が発生した場合に通知を受け取ることができます。
アラートについて詳しくはこちら
推論 推論により、リグレッションや分類などの教師あり機械学習プロセスをバッチ分析だけでなく、連続的に実行することができます。教育済み機械学習モデルを流入データに使えるのも、推論のおかげです。
推論について詳しくはこちら
言語特定 言語特定は、テキストの言語を決定する際に使用できる訓練済みモデルです。推論プロセッサ内の言語特定モデルを参照することができます。
言語特定について詳しくはこちら