<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документация Proto Observability Platform – autodiscovery</title><link>/docs/tags/autodiscovery/</link><description>Recent content in autodiscovery on Документация Proto Observability Platform</description><generator>Hugo -- gohugo.io</generator><language>ru</language><atom:link href="/docs/tags/autodiscovery/index.xml" rel="self" type="application/rss+xml"/><item><title>Setup: Автообнаружение интеграций в контейнерах</title><link>/docs/setup/agent/autodiscovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/setup/agent/autodiscovery/</guid><description>
&lt;p>На этой странице:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#%d0%ba%d0%b0%d0%ba-%d1%8d%d1%82%d0%be-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82">Как это работает&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b3%d0%b4%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%8e%d1%82%d1%81%d1%8f-%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d1%8b">Где задаются шаблоны&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d0%bb%d0%b5%d0%b9%d0%b1%d0%bb%d1%8b-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%be%d0%b2-docker">Лейблы контейнеров Docker&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b0%d0%bd%d0%bd%d0%be%d1%82%d0%b0%d1%86%d0%b8%d0%b8-%d0%bf%d0%be%d0%b4%d0%be%d0%b2-kubernetes">Аннотации подов Kubernetes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%84%d0%b0%d0%b9%d0%bb%d1%8b-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d0%b8-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b0">Файлы конфигурации агента&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5-%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%be%d0%b2">Переменные шаблонов&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%b0%d0%b2%d1%82%d0%be%d0%be%d0%b1%d0%bd%d0%b0%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5">Сбор логов через автообнаружение&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%82%d0%b5%d0%b3%d0%b8-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%b0">Теги контейнера&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d0%b8%d1%81%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%be%d0%b2">Включение и исключение контейнеров&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b8%d1%81%d1%82%d0%be%d1%87%d0%bd%d0%b8%d0%ba%d0%b8-%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%be%d0%b2-%d0%b8-%d1%81%d0%bb%d1%83%d1%88%d0%b0%d1%82%d0%b5%d0%bb%d0%b8">Источники шаблонов и слушатели&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b">Проверка работы&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="как-это-работает">Как это работает&lt;/h2>
&lt;p>В контейнерной среде адреса и порты сервисов меняются при каждом перезапуске, поэтому статическая конфигурация интеграции с &lt;code>host: 10.0.3.17&lt;/code> быстро устаревает. Автообнаружение решает эту задачу так:&lt;/p>
&lt;ol>
&lt;li>Агент отслеживает запуск и остановку контейнеров через Docker, containerd/CRI или kubelet.&lt;/li>
&lt;li>Для каждого контейнера агент ищет &lt;strong>шаблон&lt;/strong> конфигурации интеграции — в лейблах контейнера, в аннотациях пода или в файлах &lt;code>conf.d&lt;/code>.&lt;/li>
&lt;li>Агент подставляет в шаблон фактические значения (IP-адрес, порт, имя пода — см. &lt;a href="#%d0%bf%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5-%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd%d0%be%d0%b2">переменные шаблонов&lt;/a>) и запускает проверку.&lt;/li>
&lt;li>Когда контейнер останавливается, проверка снимается.&lt;/li>
&lt;/ol>
&lt;p>Метрики самих контейнеров (CPU, память, сеть) агент собирает без шаблонов — см. &lt;a href="../metrics/#%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba%d0%b8-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%be%d0%b2">Собираемые контейнерные метрики&lt;/a>. Шаблоны нужны для интеграций с приложениями внутри контейнеров: PostgreSQL, Redis, Nginx, JMX и т. д.&lt;/p>
&lt;h2 id="где-задаются-шаблоны">Где задаются шаблоны&lt;/h2>
&lt;p>Шаблон состоит из тех же частей, что и файл интеграции &lt;code>conf.d/&amp;lt;интеграция&amp;gt;.d/conf.yaml&lt;/code>: имя интеграции, &lt;code>init_config&lt;/code> и список &lt;code>instances&lt;/code>. Различается только способ записи.&lt;/p>
&lt;h3 id="лейблы-контейнеров-docker">Лейблы контейнеров Docker&lt;/h3>
&lt;p>Шаблон указывается в лейблах контейнера с префиксом &lt;code>com.protoobp.ad.&lt;/code>:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Лейбл&lt;/th>
&lt;th style="text-align:left">Содержимое&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>com.protoobp.ad.checks&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-объект: имя интеграции → &lt;code>init_config&lt;/code> и &lt;code>instances&lt;/code>. Рекомендуемый формат&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>com.protoobp.ad.check_names&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-список имён интеграций (формат v1, используется вместе с двумя следующими)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>com.protoobp.ad.init_configs&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-список &lt;code>init_config&lt;/code>, по одному на интеграцию&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>com.protoobp.ad.instances&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-список &lt;code>instances&lt;/code>, по одному на интеграцию&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>com.protoobp.ad.logs&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-список источников логов — см. &lt;a href="#%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%b0%d0%b2%d1%82%d0%be%d0%be%d0%b1%d0%bd%d0%b0%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5">Сбор логов&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>com.protoobp.ad.tags&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-список дополнительных тегов — см. &lt;a href="#%d1%82%d0%b5%d0%b3%d0%b8-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%b0">Теги контейнера&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Пример для Redis в &lt;code>docker-compose.yaml&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">redis&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">redis:7&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.checks&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;redisdb&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;init_config&amp;#34;: {},
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;instances&amp;#34;: [{&amp;#34;host&amp;#34;: &amp;#34;%%host%%&amp;#34;, &amp;#34;port&amp;#34;: &amp;#34;6379&amp;#34;}]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> }&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Тот же шаблон в формате v1:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.check_names&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[&amp;#34;redisdb&amp;#34;]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.init_configs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[{}]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.instances&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;host&amp;#34;: &amp;#34;%%host%%&amp;#34;, &amp;#34;port&amp;#34;: &amp;#34;6379&amp;#34;}]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Docker Swarm&lt;/h4>
В файле стека лейблы указываются в секции &lt;code>labels&lt;/code> сервиса, а не в &lt;code>deploy.labels&lt;/code> — см. &lt;a href="../docker/#%d0%b0%d0%b2%d1%82%d0%be%d0%be%d0%b1%d0%bd%d0%b0%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d1%82%d0%b5%d0%b3%d0%b8-swarm">Автообнаружение и теги Swarm&lt;/a>.
&lt;/div>
&lt;p>Агент также читает лейблы со старым префиксом, которые встречаются в готовых образах сторонних производителей, поэтому такие образы мониторятся без изменений.&lt;/p>
&lt;h3 id="аннотации-подов-kubernetes">Аннотации подов Kubernetes&lt;/h3>
&lt;p>В Kubernetes шаблон указывается в аннотациях пода (в &lt;code>Deployment&lt;/code>, &lt;code>StatefulSet&lt;/code> и т. п. — в &lt;code>spec.template.metadata.annotations&lt;/code>). В ключ аннотации входит &lt;strong>имя контейнера&lt;/strong> внутри пода:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Аннотация&lt;/th>
&lt;th style="text-align:left">Содержимое&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>ad.protoobp.com/&amp;lt;контейнер&amp;gt;.checks&lt;/code>&lt;/td>
&lt;td style="text-align:left">JSON-объект: имя интеграции → &lt;code>init_config&lt;/code> и &lt;code>instances&lt;/code>. Рекомендуемый формат&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>ad.protoobp.com/&amp;lt;контейнер&amp;gt;.check_names&lt;/code>, &lt;code>.init_configs&lt;/code>, &lt;code>.instances&lt;/code>&lt;/td>
&lt;td style="text-align:left">Формат v1, как у лейблов Docker&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>ad.protoobp.com/&amp;lt;контейнер&amp;gt;.logs&lt;/code>&lt;/td>
&lt;td style="text-align:left">Источники логов контейнера&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">apps/v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Deployment&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">postgres&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">template&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">annotations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ad.protoobp.com/postgres.checks&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;postgres&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;init_config&amp;#34;: {},
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;instances&amp;#34;: [
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> {
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;host&amp;#34;: &amp;#34;%%host%%&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;port&amp;#34;: &amp;#34;5432&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;username&amp;#34;: &amp;#34;protoobp&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;password&amp;#34;: &amp;#34;ENC[k8s_secret@db/postgres-credentials/password]&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> ]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> }&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">containers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">postgres &lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># совпадает с &amp;lt;контейнер&amp;gt; в ключе аннотации&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">postgres:16&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Пароль в примере не хранится в манифесте, а берётся из Kubernetes Secret — см. &lt;a href="../secrets/">Управление секретами&lt;/a>.&lt;/p>
&lt;p>Если имя контейнера в аннотации не совпадает ни с одним контейнером пода, шаблон не применяется. Проверить это можно командой &lt;code>protoobp-agent configcheck&lt;/code> (см. &lt;a href="#%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b">Проверка работы&lt;/a>).&lt;/p>
&lt;h3 id="файлы-конфигурации-агента">Файлы конфигурации агента&lt;/h3>
&lt;p>Шаблон можно положить в обычный файл интеграции, добавив в него &lt;code>ad_identifiers&lt;/code> — список идентификаторов контейнеров, к которым шаблон применяется. Идентификатор — короткое имя образа без реестра и тега:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># conf.d/redisdb.d/conf.yaml&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">ad_identifiers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">redis &lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># образы registry.local/library/redis:7, redis:6.2 и т. п.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">init_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">instances&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">host&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;%%host%%&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">port&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;6379&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Этот способ удобен, когда менять образы и манифесты приложений нельзя. На Kubernetes файлы передаются агенту через параметр &lt;code>protoobp.confd&lt;/code> в &lt;code>values.yaml&lt;/code> Helm-чарта.&lt;/p>
&lt;p>Отдельный идентификатор можно назначить контейнеру лейблом &lt;code>com.protoobp.ad.check.id&lt;/code> — тогда в &lt;code>ad_identifiers&lt;/code> указывается он, а не имя образа.&lt;/p>
&lt;h2 id="переменные-шаблонов">Переменные шаблонов&lt;/h2>
&lt;p>Значения подставляются при каждом запуске контейнера.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Переменная&lt;/th>
&lt;th style="text-align:left">Значение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%host%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">IP-адрес контейнера. Если сетей несколько, берётся адрес в сети &lt;code>bridge&lt;/code>; если её нет, шаблон не применяется — укажите сеть явно через &lt;code>%%host_&amp;lt;сеть&amp;gt;%%&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%host_&amp;lt;сеть&amp;gt;%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">IP-адрес контейнера в указанной сети Docker, например &lt;code>%%host_backend%%&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%port%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Наибольший из открытых портов контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%port_&amp;lt;N&amp;gt;%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Порт с индексом &lt;code>N&lt;/code> в списке открытых портов, отсортированном по возрастанию (&lt;code>%%port_0%%&lt;/code> — наименьший)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%port_&amp;lt;имя&amp;gt;%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Порт с указанным именем (имя порта контейнера в Kubernetes, например &lt;code>%%port_metrics%%&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%pid%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">PID основного процесса контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%hostname%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Имя хоста контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%env_&amp;lt;ПЕРЕМЕННАЯ&amp;gt;%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Значение переменной окружения &lt;strong>процесса агента&lt;/strong> (не контейнера приложения)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%kube_namespace%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Пространство имён пода&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%kube_pod_name%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">Имя пода&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>%%kube_pod_uid%%&lt;/code>&lt;/td>
&lt;td style="text-align:left">UID пода&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Если переменную не удалось вычислить (например, у контейнера нет открытых портов, а шаблон использует &lt;code>%%port%%&lt;/code>), шаблон к контейнеру не применяется, а причина видна в выводе &lt;code>protoobp-agent configcheck&lt;/code>.&lt;/p>
&lt;p>Подстановку &lt;code>%%env_...%%&lt;/code> можно ограничить: &lt;code>ad_allowed_env_vars&lt;/code> задаёт список разрешённых переменных, &lt;code>ad_disable_env_var_resolution: true&lt;/code> запрещает подстановку полностью.&lt;/p>
&lt;h2 id="сбор-логов-через-автообнаружение">Сбор логов через автообнаружение&lt;/h2>
&lt;p>Чтобы агент собирал логи из контейнеров, должны быть включены &lt;code>logs_enabled: true&lt;/code> и сбор логов контейнеров (см. &lt;a href="../../../instrumentation/logs/data-ingestion/#%d1%81%d0%b1%d0%be%d1%80-%d0%bb%d0%be%d0%b3%d0%be%d0%b2-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%be%d0%b2">Сбор логов контейнеров&lt;/a>). Лейбл или аннотация &lt;code>logs&lt;/code> задаёт для контейнера &lt;code>source&lt;/code>, &lt;code>service&lt;/code> и правила обработки:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.logs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;source&amp;#34;: &amp;#34;nginx&amp;#34;, &amp;#34;service&amp;#34;: &amp;#34;frontend&amp;#34;}]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">annotations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ad.protoobp.com/frontend.logs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;source&amp;#34;: &amp;#34;nginx&amp;#34;, &amp;#34;service&amp;#34;: &amp;#34;frontend&amp;#34;}]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В той же записи указываются правила &lt;code>log_processing_rules&lt;/code> — например, склейка многострочных записей (&lt;code>multi_line&lt;/code>) или маскирование данных (&lt;code>mask_sequences&lt;/code>, см. &lt;a href="../../../intro/security/#%d0%bc%d0%b0%d1%81%d0%ba%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-%d0%b2-%d0%bb%d0%be%d0%b3%d0%b0%d1%85">Маскирование данных в логах&lt;/a>).&lt;/p>
&lt;p>Параметр &lt;code>logs_config.container_collect_all: true&lt;/code> включает сбор логов всех контейнеров, в том числе без лейблов; лейблы &lt;code>logs&lt;/code> в этом случае уточняют &lt;code>source&lt;/code> и &lt;code>service&lt;/code>.&lt;/p>
&lt;h2 id="теги-контейнера">Теги контейнера&lt;/h2>
&lt;p>Лейбл &lt;code>com.protoobp.ad.tags&lt;/code> добавляет теги ко всем метрикам, логам и трейсам контейнера:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[&amp;#34;team:billing&amp;#34;, &amp;#34;env:prod&amp;#34;]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В Docker Swarm агент дополнительно добавляет теги из стандартных лейблов Swarm — см. &lt;a href="../docker/#%d0%b0%d0%b2%d1%82%d0%be%d0%be%d0%b1%d0%bd%d0%b0%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d1%82%d0%b5%d0%b3%d0%b8-swarm">Автообнаружение и теги Swarm&lt;/a>.&lt;/p>
&lt;h2 id="включение-и-исключение-контейнеров">Включение и исключение контейнеров&lt;/h2>
&lt;p>По умолчанию агент собирает метрики всех контейнеров и применяет шаблоны ко всем контейнерам, для которых они найдены. Фильтры позволяют исключить служебные или шумные контейнеры.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Параметр&lt;/th>
&lt;th style="text-align:left">Что исключается&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>container_exclude&lt;/code> / &lt;code>container_include&lt;/code>&lt;/td>
&lt;td style="text-align:left">Метрики, логи и автообнаружение&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>container_exclude_metrics&lt;/code> / &lt;code>container_include_metrics&lt;/code>&lt;/td>
&lt;td style="text-align:left">Только метрики контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>container_exclude_logs&lt;/code> / &lt;code>container_include_logs&lt;/code>&lt;/td>
&lt;td style="text-align:left">Только логи контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>ac_exclude&lt;/code> / &lt;code>ac_include&lt;/code>&lt;/td>
&lt;td style="text-align:left">Метрики и автообнаружение (прежние названия параметров)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Значение — список правил вида &lt;code>&amp;lt;атрибут&amp;gt;:&amp;lt;регулярное выражение&amp;gt;&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>name:&lt;/code> — имя контейнера;&lt;/li>
&lt;li>&lt;code>image:&lt;/code> — образ;&lt;/li>
&lt;li>&lt;code>kube_namespace:&lt;/code> — пространство имён Kubernetes.&lt;/li>
&lt;/ul>
&lt;p>Правила &lt;code>include&lt;/code> имеют приоритет над &lt;code>exclude&lt;/code>: контейнер, попавший под оба, не исключается.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Исключить все контейнеры, кроме пространств имён prod и payments&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">container_exclude&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;name:.*&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">container_include&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;kube_namespace:^prod$&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;kube_namespace:^payments$&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># Не собирать логи sidecar-контейнеров&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">container_exclude_logs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;image:.*istio/proxyv2.*&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;name:^istio-proxy$&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Через переменные окружения (&lt;code>POBP_CONTAINER_EXCLUDE&lt;/code>, &lt;code>POBP_CONTAINER_INCLUDE&lt;/code> и т. д.) правила передаются строкой через пробел. В Helm-чарте агента для этого есть параметры &lt;code>protoobp.containerExclude&lt;/code>, &lt;code>protoobp.containerInclude&lt;/code>, &lt;code>protoobp.containerExcludeLogs&lt;/code> и &lt;code>protoobp.containerExcludeMetrics&lt;/code>.&lt;/p>
&lt;p>Служебные pause-контейнеры Kubernetes и OpenShift исключаются по умолчанию (&lt;code>exclude_pause_container: true&lt;/code>).&lt;/p>
&lt;h2 id="источники-шаблонов-и-слушатели">Источники шаблонов и слушатели&lt;/h2>
&lt;p>Обычно ничего настраивать не нужно: агент сам определяет среду (Docker, containerd, Kubernetes, Podman) и включает нужные источники шаблонов и слушатели событий. Ручная настройка требуется в редких случаях.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Параметр&lt;/th>
&lt;th style="text-align:left">Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>config_providers&lt;/code>&lt;/td>
&lt;td style="text-align:left">Источники шаблонов: &lt;code>kubelet&lt;/code> (аннотации подов), &lt;code>docker&lt;/code> (лейблы контейнеров), &lt;code>clusterchecks&lt;/code> (проверки, распределяемые Cluster Agent), &lt;code>kube_services&lt;/code> (сервисы Kubernetes), а также внешние хранилища шаблонов &lt;code>etcd&lt;/code>, &lt;code>consul&lt;/code>, &lt;code>zookeeper&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>extra_config_providers&lt;/code>&lt;/td>
&lt;td style="text-align:left">Дополнительные источники по имени, с параметрами по умолчанию&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>listeners&lt;/code>, &lt;code>extra_listeners&lt;/code>&lt;/td>
&lt;td style="text-align:left">Слушатели событий контейнеров&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>autoconfig_exclude_features&lt;/code>&lt;/td>
&lt;td style="text-align:left">Отключить автоматически определённую среду, например &lt;code>[&amp;quot;docker&amp;quot;]&lt;/code> на хосте, где Docker установлен, но не используется&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>autoconfig_include_features&lt;/code>&lt;/td>
&lt;td style="text-align:left">Принудительно включить среду, которую агент не определил сам&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>autoconf_config_files_poll&lt;/code>, &lt;code>autoconf_config_files_poll_interval&lt;/code>&lt;/td>
&lt;td style="text-align:left">Перечитывать файлы &lt;code>conf.d&lt;/code> без перезапуска агента (только конфигурации интеграций, не логов)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Пример для хоста, где агент установлен пакетом и должен работать с контейнерами Docker:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">listeners&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">docker&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">config_providers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">docker&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">polling&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Пользователь &lt;code>pobp-agent&lt;/code> при этом должен входить в группу &lt;code>docker&lt;/code> — см. &lt;a href="../linux/#%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f">Linux агент – конфигурация&lt;/a>.&lt;/p>
&lt;h2 id="проверка-работы">Проверка работы&lt;/h2>
&lt;ul>
&lt;li>&lt;code>protoobp-agent configcheck&lt;/code> — список всех применённых конфигураций интеграций с источником каждой (файл, лейбл контейнера, аннотация пода) и подставленными значениями переменных. В конце вывода перечислены шаблоны, которые не удалось применить, с причиной.&lt;/li>
&lt;li>&lt;code>protoobp-agent status&lt;/code> — в блоке &lt;code>Collector&lt;/code> видно, запускаются ли проверки и есть ли ошибки подключения к сервису.&lt;/li>
&lt;/ul>
&lt;p>В контейнере агента команды выполняются как &lt;code>agent configcheck&lt;/code> и &lt;code>agent status&lt;/code> (см. &lt;a href="../commands/#%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b0">Проверка работы агента&lt;/a>).&lt;/p>
&lt;p>Примеры шаблонов для конкретных технологий есть на страницах интеграций, например &lt;a href="../../../instrumentation/infra/jmx/">JMX&lt;/a>, &lt;a href="../../../instrumentation/infra/databases/oracledb/">Oracle&lt;/a>, &lt;a href="../../../instrumentation/infra/databases/postgresql/">PostgreSQL&lt;/a>, &lt;a href="../../../instrumentation/infra/webappproxy/nginx/">Nginx&lt;/a>.&lt;/p></description></item></channel></rss>