[
  {
    "path": "1c_central_server.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export>\n    <version>4.4</version>\n    <date>2023-07-13T05:09:00Z</date>\n    <groups>\n        <group>\n            <name>Templates/Applications</name>\n        </group>\n        <group>\n            <name>Templates/Kaminsoft</name>\n        </group>\n    </groups>\n    <templates>\n        <template>\n            <template>Template App 1C Enterprise Central Server</template>\n            <name>Template App 1C Enterprise Central Server</name>\n            <description>Шаблон для мониторинга центального сервера 1С Предприятия&#13;\n&#13;\nПодробнее https://slothfk.github.io/1c_zabbix_template_ce/</description>\n            <groups>\n                <group>\n                    <name>Templates/Applications</name>\n                </group>\n                <group>\n                    <name>Templates/Kaminsoft</name>\n                </group>\n            </groups>\n            <applications>\n                <application>\n                    <name>[1С] Доступность</name>\n                </application>\n                <application>\n                    <name>[1С] Информация</name>\n                </application>\n                <application>\n                    <name>[1С] Сеансы</name>\n                </application>\n            </applications>\n            <items>\n                <item>\n                    <name>[1С/Инфобаза] Ограничения</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.cs.ib.restrictions</key>\n                    <delay>5m</delay>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Количество активных</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.as</key>\n                    <delay>0</delay>\n                    <description>Число сеансов, имеющих активный серверный вызов</description>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Количество фоновых заданий</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.bg</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:(\\d+):\\d+:\\d+:\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Текущая длительность вызова фонового задания</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.bgd</key>\n                    <delay>0</delay>\n                    <value_type>FLOAT</value_type>\n                    <units>s</units>\n                    <description>Максимальное значение длительности среди серверных вызовов фоновых заданий, выполняющихся в настоящий момент</description>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                        <step>\n                            <type>MULTIPLIER</type>\n                            <params>0.001</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Текущая длительность пользовательского вызова</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.cld</key>\n                    <delay>0</delay>\n                    <value_type>FLOAT</value_type>\n                    <units>s</units>\n                    <description>Максимальное значение длительности среди пользовательских (интерактивных) серверных вызовов, выполняющихся в настоящий момент</description>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                        <step>\n                            <type>MULTIPLIER</type>\n                            <params>0.001</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Количество спящих</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.hb</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:(\\d+):\\d+:\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Текущая длительность вызова http-сервиса</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.hsd</key>\n                    <delay>0</delay>\n                    <value_type>FLOAT</value_type>\n                    <units>s</units>\n                    <description>Максимальное значение длительности среди серверных вызовов http-сервисов, выполняющихся в настоящий момент</description>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                        <step>\n                            <type>MULTIPLIER</type>\n                            <params>0.001</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Количество http-сервисов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.http</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Общее количество</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.total</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:(\\d+):\\d+:\\d+:\\d+:\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Количество веб-сервисов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.ws</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Сеансы] Текущая длительность вызова веб-сервиса</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.cs.sessions.wsd</key>\n                    <delay>0</delay>\n                    <value_type>FLOAT</value_type>\n                    <units>s</units>\n                    <description>Максимальное значение длительности среди серверных вызовов веб-сервисов, выполняющихся в настоящий момент</description>\n                    <applications>\n                        <application>\n                            <name>[1С] Сеансы</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                        <step>\n                            <type>MULTIPLIER</type>\n                            <params>0.001</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Центральный сервер] Текущие сеансы</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                    </applications>\n                </item>\n            </items>\n            <discovery_rules>\n                <discovery_rule>\n                    <name>[1С/Центральный сервер] Кластеры</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.cs.clusters.discovery[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <delay>1h</delay>\n                    <status>DISABLED</status>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество активных сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.as[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <description>Число сеансов кластера, имеющих активный серверный вызов</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Текущая длительность вызова фонового задания</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.bgd[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности сред серверных вызовов фоновых заданий, выполняющихся в настоящий момент в данном кластере</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество сеансов фоновых заданий</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.bg[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:(\\d+):\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Текущая длительность пользовательского вызова</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.cld[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности среди пользовательских (интерактивных) серверных вызовов, выполняющихся в настоящий момент в данном кластере</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество спящих сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.hb[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:(\\d+):\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Текущая длительность вызова http-сервиса</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.hsd[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности сред серверных вызовов http-сервисов, выполняющихся в настоящий момент в данном кластере</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество сеансов http-сервисов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.hs[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Общее количество сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.total[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:(\\d+):\\d+:\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Текущая длительность вызова веб-сервиса</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.wsd[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности сред серверных вызовов веб-сервисов, выполняющихся в настоящий момент в данном кластере</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество сеансов веб-сервисов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.ws[{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                    </item_prototypes>\n                    <graph_prototypes>\n                        <graph_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Максимальная длительность текущего вызова</name>\n                            <graph_items>\n                                <graph_item>\n                                    <color>199C0D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.cld[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>1</sortorder>\n                                    <color>F63100</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.bgd[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>2</sortorder>\n                                    <color>2774A4</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.wsd[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>3</sortorder>\n                                    <color>F7941D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.hsd[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                            </graph_items>\n                        </graph_prototype>\n                        <graph_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Текущие сеансы</name>\n                            <graph_items>\n                                <graph_item>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>199C0D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.total[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>1</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>F63100</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.bg[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>2</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>2774A4</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.hb[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>3</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>F7941D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.ws[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>4</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>FC6EA3</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.hs[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>5</sortorder>\n                                    <color>6C59DC</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.as[{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                            </graph_items>\n                        </graph_prototype>\n                    </graph_prototypes>\n                </discovery_rule>\n                <discovery_rule>\n                    <name>[1С/Центральный сервер] Информационные базы</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.cs.infobases.discovery[{$IBNAME_WITH_CLSTR},{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <delay>1h</delay>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Блокировка регламентных заданий</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.ib.sched_deny[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Информация</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID},\\d+,(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.ib.restrictions</key>\n                            </master_item>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{last()}=1</expression>\n                                    <name>[1С/Ифобаза/{#IB_NAME}] Включена блокировка регламентных заданий</name>\n                                    <priority>AVERAGE</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Блокировка начала сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.ib.sess_deny[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Информация</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID},(\\d+),\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.ib.restrictions</key>\n                            </master_item>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{last()}=1</expression>\n                                    <name>[1С/Ифобаза/{#IB_NAME}] Включена блокировка начала сеансов</name>\n                                    <priority>AVERAGE</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Сеанс длительного пользовательского вызова</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.asu[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <history>14d</history>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <description>Пользовательский сеанс (имя пользователя, номер сеанса) с самым долгим активным текущим вызовом (время вызова текущее)</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(.*)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество активных сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.as[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <description>Число сеансов информационной базы, имеющих активный серверный вызов</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Текущая длительность вызова фонового задания</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.bgd[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности среди серверных вызовов фоновых заданий, выполняющихся в настоящий момент в данной информационной базе</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество сеансов фоновых заданий</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.bg[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:(\\d+):\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Текущая длительность пользовательского вызова</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.cld[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности среди пользовательских (интерактивных) серверных вызовов, выполняющихся в настоящий момент в данной информационной базе</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{last()}&gt;{$CALL_DUR_THRESHOLD}</expression>\n                                    <name>[1С/Ифобаза/{#IB_NAME}] Превышен порог длительности пользовательского вызова</name>\n                                    <priority>AVERAGE</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество спящих сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.hb[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:(\\d+):\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Текущая длительность вызова http-сервиса</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.hsd[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности среди серверных вызовов http-сервисов, выполняющихся в настоящий момент в данной информационной базе</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество сеансов http-сервисов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.hs[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Общее количество сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.total[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:(\\d+):\\d+:\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Текущая длительность вызова веб-сервиса</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.wsd[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <value_type>FLOAT</value_type>\n                            <units>s</units>\n                            <description>Максимальное значение длительности среди серверных вызовов веб-сервисов, выполняющихся в настоящий момент в данной информационной базе</description>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                                <step>\n                                    <type>MULTIPLIER</type>\n                                    <params>0.001</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество сеансов веб-сервисов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.cs.sessions.ws[{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Сеансы</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.cs.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                    </item_prototypes>\n                    <graph_prototypes>\n                        <graph_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Максимальная длительность текущего вызова</name>\n                            <graph_items>\n                                <graph_item>\n                                    <color>199C0D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.cld[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>1</sortorder>\n                                    <color>F63100</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.bgd[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>2</sortorder>\n                                    <color>2774A4</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.wsd[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>3</sortorder>\n                                    <color>F7941D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.hsd[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                            </graph_items>\n                        </graph_prototype>\n                        <graph_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Текущие сеансы</name>\n                            <graph_items>\n                                <graph_item>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>199C0D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.total[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>1</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>F63100</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.bg[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>2</sortorder>\n                                    <color>2774A4</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.hb[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>3</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>F7941D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.ws[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>4</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>FC6EA3</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.hs[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>5</sortorder>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>6C59DC</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise Central Server</host>\n                                        <key>1c.cs.sessions.as[{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                            </graph_items>\n                        </graph_prototype>\n                    </graph_prototypes>\n                </discovery_rule>\n                <discovery_rule>\n                    <name>[1С/Центральный сервер] Сервисы RAS</name>\n                    <key>1c.cs.ras.discovery[{$RAS_PORTS}]</key>\n                    <delay>1h</delay>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Центральный сервер] Статус сервиса RAS (порт {#RAS_PORT})</name>\n                            <type>SIMPLE</type>\n                            <key>net.tcp.service[tcp,,{#RAS_PORT}]</key>\n                            <delay>30s</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Доступность</name>\n                                </application>\n                            </applications>\n                            <valuemap>\n                                <name>Service state</name>\n                            </valuemap>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{last()}=0</expression>\n                                    <name>[1С/Центральный сервер] Недоступен сервис RAS на порту {#RAS_PORT}</name>\n                                    <priority>HIGH</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                    </item_prototypes>\n                </discovery_rule>\n            </discovery_rules>\n            <macros>\n                <macro>\n                    <macro>{$CALL_DUR_THRESHOLD}</macro>\n                    <value>60</value>\n                    <description>Порог длительности пользовательского вызова, сек</description>\n                </macro>\n                <macro>\n                    <macro>{$IBNAME_WITH_CLSTR}</macro>\n                    <value>0</value>\n                    <description>Включать имя кластера в имя информационной базы</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_PASS}</macro>\n                    <description>Пароль администратора кластера</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_PORTS}</macro>\n                    <value>1545</value>\n                    <description>Порты сервиса RAS (если используется несколько сервисов, то указываются через запятую)</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_TIMEOUT}</macro>\n                    <value>1.5</value>\n                    <description>Время ожидания ответа от сервиса RAS, сек</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_USER}</macro>\n                    <description>Имя пользователя - администратора кластера</description>\n                </macro>\n            </macros>\n        </template>\n    </templates>\n    <graphs>\n        <graph>\n            <name>[1С/Центральный сервер] Максимальная длительность текущего вызова</name>\n            <graph_items>\n                <graph_item>\n                    <color>199C0D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.cld</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <color>F63100</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.bgd</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <color>2774A4</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.wsd</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>3</sortorder>\n                    <color>F7941D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.hsd</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n        <graph>\n            <name>[1С/Центральный сервер] Текущие сеансы</name>\n            <graph_items>\n                <graph_item>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>199C0D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.total</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>F63100</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.bg</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>2774A4</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.hb</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>3</sortorder>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>F7941D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.ws</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>4</sortorder>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>FC6EA3</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.http</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>5</sortorder>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>6C59DC</color>\n                    <item>\n                        <host>Template App 1C Enterprise Central Server</host>\n                        <key>1c.cs.sessions.as</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n    </graphs>\n    <value_maps>\n        <value_map>\n            <name>Service state</name>\n            <mappings>\n                <mapping>\n                    <value>0</value>\n                    <newvalue>Down</newvalue>\n                </mapping>\n                <mapping>\n                    <value>1</value>\n                    <newvalue>Up</newvalue>\n                </mapping>\n            </mappings>\n        </value_map>\n    </value_maps>\n</zabbix_export>\n"
  },
  {
    "path": "1c_license_files.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export>\n    <version>4.4</version>\n    <date>2023-06-09T08:59:00Z</date>\n    <groups>\n        <group>\n            <name>Templates/Kaminsoft</name>\n        </group>\n    </groups>\n    <templates>\n        <template>\n            <template>Template App 1C License Files</template>\n            <name>Template App 1C License Files</name>\n            <description>Мониторинг файлов программных лицензий 1С</description>\n            <groups>\n                <group>\n                    <name>Templates/Kaminsoft</name>\n                </group>\n            </groups>\n            <applications>\n                <application>\n                    <name>[1С] Программные лицензии</name>\n                </application>\n            </applications>\n            <items>\n                <item>\n                    <name>[1С/Лицензии] Число клиентских лицензий</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.licenses.clients</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.licenses.info</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Сводная информация</name>\n                    <key>1c.licenses.info</key>\n                    <delay>1h</delay>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Число серверных лицензий</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.licenses.servers</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:(\\d+):(\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.licenses.info</key>\n                    </master_item>\n                </item>\n            </items>\n            <discovery_rules>\n                <discovery_rule>\n                    <name>[1C/Лицензии] Файлы лицензий</name>\n                    <key>1c.licenses.discovery</key>\n                    <delay>1h</delay>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Лицензии] Состояние файла лицензии ({#FILE})</name>\n                            <key>1c.license.check[{#PIN}-{#NUMBER}]</key>\n                            <delay>1h</delay>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{str(Ok,#3)}=0</expression>\n                                    <name>[1С/Лицензии] Файл лицензии {#FILE} не прошел проверку</name>\n                                    <priority>HIGH</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Лицензии] Срок действия ({#FILE})</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.license.deadline[{#FILE}]</key>\n                            <delay>0</delay>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>{#FILE}:\\w+:(.*)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.licenses.info</key>\n                            </master_item>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{date()}&gt;{last()}</expression>\n                                    <name>[1С/Лицензии] Истек срок действия лицензии ({#FILE})</name>\n                                    <priority>HIGH</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Лицензии] Тип лицензии ({#FILE})</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.license.type[{#FILE}]</key>\n                            <delay>0</delay>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>{#FILE}:(\\w+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.licenses.info</key>\n                            </master_item>\n                        </item_prototype>\n                    </item_prototypes>\n                </discovery_rule>\n            </discovery_rules>\n        </template>\n    </templates>\n</zabbix_export>\n"
  },
  {
    "path": "1c_license_server.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export>\n    <version>4.4</version>\n    <date>2023-06-15T18:45:43Z</date>\n    <groups>\n        <group>\n            <name>Templates/Applications</name>\n        </group>\n        <group>\n            <name>Templates/Kaminsoft</name>\n        </group>\n    </groups>\n    <templates>\n        <template>\n            <template>Template App 1C Enterprise License Server</template>\n            <name>Template App 1C Enterprise License Server</name>\n            <description>Шаблон для мониторинга сервиса лицензирования сервера 1С Предприятия&#13;\n&#13;\nПодробнее https://slothfk.github.io/1c_zabbix_template_ce/</description>\n            <templates>\n                <template>\n                    <name>Template App 1C License Files</name>\n                </template>\n            </templates>\n            <groups>\n                <group>\n                    <name>Templates/Applications</name>\n                </group>\n                <group>\n                    <name>Templates/Kaminsoft</name>\n                </group>\n            </groups>\n            <applications>\n                <application>\n                    <name>[1С] Доступность</name>\n                </application>\n            </applications>\n            <items>\n                <item>\n                    <name>[1С/Лицензии] Количество лицензий на клиенте</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ls.license.client</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                    <triggers>\n                        <trigger>\n                            <expression>{last()}&gt;0</expression>\n                            <name>[1С/Лицензии] Используются лицензии с клиентских компьютеров</name>\n                            <status>DISABLED</status>\n                            <priority>INFO</priority>\n                            <manual_close>YES</manual_close>\n                        </trigger>\n                    </triggers>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Общее количество сеансов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ls.license.total</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:(\\d+):\\d+:\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Количество уникальных пользователей</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ls.license.uniq</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:(\\d+):\\d+:\\d+:\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Количество выданных лицензий</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ls.license.used</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:(\\d+):\\d+:\\d+:\\d+:\\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Количество веб-клиентов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ls.license.webclient</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Активные сеансы</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                </item>\n            </items>\n            <discovery_rules>\n                <discovery_rule>\n                    <name>[1С/Лицензии] Кластеры</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ls.clusters.discovery[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <delay>1h</delay>\n                    <lifetime>90d</lifetime>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество лицензий на клиенте</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.client[cluster,{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Общее количество сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.total[cluster,{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:(\\d+):\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество уникальных пользователей</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.uniq[cluster,{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:(\\d+):\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество выданных лицензий</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.used[cluster,{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:(\\d+):\\d+:\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Количество веб-клиентов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.webclient[cluster,{#CLSTR_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>CL#{#CLSTR_UUID}:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Процесс менеджера кластера</name>\n                            <type>ZABBIX_ACTIVE</type>\n                            <key>1c.ls.process[{#CLSTR_UUID},rmngr,{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            <applications>\n                                <application>\n                                    <name>[1С] Доступность</name>\n                                </application>\n                            </applications>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Рабочий процесс кластера</name>\n                            <type>ZABBIX_ACTIVE</type>\n                            <key>1c.ls.process[{#CLSTR_UUID},rphost,{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            <applications>\n                                <application>\n                                    <name>[1С] Доступность</name>\n                                </application>\n                            </applications>\n                        </item_prototype>\n                    </item_prototypes>\n                    <trigger_prototypes>\n                        <trigger_prototype>\n                            <expression>{Template App 1C Enterprise License Server:1c.ls.process[{#CLSTR_UUID},rmngr,{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}].last()}=0 or {Template App 1C Enterprise License Server:1c.ls.process[{#CLSTR_UUID},rphost,{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}].last()}=0</expression>\n                            <name>[1С/Сервер лицензирования] Нарушена связь с кластером {#CLSTR_NAME}</name>\n                            <priority>HIGH</priority>\n                            <manual_close>YES</manual_close>\n                        </trigger_prototype>\n                    </trigger_prototypes>\n                    <graph_prototypes>\n                        <graph_prototype>\n                            <name>[1С/Кластер/{#CLSTR_NAME}] Использование активированных лицензий</name>\n                            <graph_items>\n                                <graph_item>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>1B5E20</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.used[cluster,{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>1</sortorder>\n                                    <color>FFFFFF</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.uniq[cluster,{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>2</sortorder>\n                                    <color>FC6EA3</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.client[cluster,{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>3</sortorder>\n                                    <color>6C59DC</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.webclient[cluster,{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>4</sortorder>\n                                    <color>F7941D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.total[cluster,{#CLSTR_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                            </graph_items>\n                        </graph_prototype>\n                    </graph_prototypes>\n                </discovery_rule>\n                <discovery_rule>\n                    <name>[1С/Лицензии] Информационные  базы</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ls.infobases.discovery[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <delay>1h</delay>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество лицензий на клиенте</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.client[infobase,{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:(\\d+):\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Общее количество сеансов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.total[infobase,{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:(\\d+):\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество уникальных пользователей</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.uniq[infobase,{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:(\\d+):\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество выданных лицензий</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.used[infobase,{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:(\\d+):\\d+:\\d+:\\d+:\\d+\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Количество веб-клиентов</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.ls.license.webclient[infobase,{#IB_UUID}]</key>\n                            <delay>0</delay>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>IB#{#IB_UUID}:\\d+:\\d+:\\d+:\\d+:(\\d+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.ls.sessions[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                            </master_item>\n                        </item_prototype>\n                    </item_prototypes>\n                    <graph_prototypes>\n                        <graph_prototype>\n                            <name>[1С/Инфобаза/{#IB_NAME}] Использование активированных лицензий</name>\n                            <width>800</width>\n                            <height>300</height>\n                            <graph_items>\n                                <graph_item>\n                                    <drawtype>GRADIENT_LINE</drawtype>\n                                    <color>1B5E20</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.used[infobase,{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>1</sortorder>\n                                    <color>FFFFFF</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.uniq[infobase,{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>2</sortorder>\n                                    <color>FC6EA3</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.client[infobase,{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>3</sortorder>\n                                    <color>6C59DC</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.webclient[infobase,{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                                <graph_item>\n                                    <sortorder>4</sortorder>\n                                    <color>F7941D</color>\n                                    <item>\n                                        <host>Template App 1C Enterprise License Server</host>\n                                        <key>1c.ls.license.total[infobase,{#IB_UUID}]</key>\n                                    </item>\n                                </graph_item>\n                            </graph_items>\n                        </graph_prototype>\n                    </graph_prototypes>\n                </discovery_rule>\n            </discovery_rules>\n            <macros>\n                <macro>\n                    <macro>{$LIC_UTIL_LIMIT}</macro>\n                    <value>0.9</value>\n                </macro>\n                <macro>\n                    <macro>{$RAS_PASS}</macro>\n                    <description>Пароль пользователя администратора кластера</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_PORTS}</macro>\n                    <value>1545</value>\n                    <description>Порты сервиса RAS (если используется несколько сервисов, то указываются через запятую)</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_TIMEOUT}</macro>\n                    <value>1.5</value>\n                    <description>Таймаут ожидания ответа от службы RAS</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_USER}</macro>\n                    <description>Имя пользователя администратора кластера</description>\n                </macro>\n            </macros>\n            <screens>\n                <screen>\n                    <name>[1С/Лицензии] Использование активированных лицензий по информационным базам</name>\n                    <hsize>1</hsize>\n                    <vsize>2</vsize>\n                    <screen_items>\n                        <screen_item>\n                            <resourcetype>0</resourcetype>\n                            <style>0</style>\n                            <resource>\n                                <name>[1С/Лицензии] Использование активированных лицензий</name>\n                                <host>Template App 1C Enterprise License Server</host>\n                            </resource>\n                            <width>1200</width>\n                            <height>300</height>\n                            <x>0</x>\n                            <y>0</y>\n                            <colspan>1</colspan>\n                            <rowspan>1</rowspan>\n                            <elements>0</elements>\n                            <valign>0</valign>\n                            <halign>0</halign>\n                            <dynamic>0</dynamic>\n                            <sort_triggers>0</sort_triggers>\n                            <url/>\n                            <application/>\n                            <max_columns>3</max_columns>\n                        </screen_item>\n                        <screen_item>\n                            <resourcetype>20</resourcetype>\n                            <style>0</style>\n                            <resource>\n                                <name>[1С/Инфобаза/{#IB_NAME}] Использование активированных лицензий</name>\n                                <host>Template App 1C Enterprise License Server</host>\n                            </resource>\n                            <width>600</width>\n                            <height>200</height>\n                            <x>0</x>\n                            <y>1</y>\n                            <colspan>1</colspan>\n                            <rowspan>1</rowspan>\n                            <elements>0</elements>\n                            <valign>0</valign>\n                            <halign>0</halign>\n                            <dynamic>0</dynamic>\n                            <sort_triggers>0</sort_triggers>\n                            <url/>\n                            <application/>\n                            <max_columns>2</max_columns>\n                        </screen_item>\n                    </screen_items>\n                </screen>\n                <screen>\n                    <name>[1С/Лицензии] Использование активированных лицензий по кластерам</name>\n                    <hsize>1</hsize>\n                    <vsize>2</vsize>\n                    <screen_items>\n                        <screen_item>\n                            <resourcetype>0</resourcetype>\n                            <style>0</style>\n                            <resource>\n                                <name>[1С/Лицензии] Использование активированных лицензий</name>\n                                <host>Template App 1C Enterprise License Server</host>\n                            </resource>\n                            <width>1200</width>\n                            <height>300</height>\n                            <x>0</x>\n                            <y>0</y>\n                            <colspan>1</colspan>\n                            <rowspan>1</rowspan>\n                            <elements>0</elements>\n                            <valign>0</valign>\n                            <halign>0</halign>\n                            <dynamic>0</dynamic>\n                            <sort_triggers>0</sort_triggers>\n                            <url/>\n                            <application/>\n                            <max_columns>3</max_columns>\n                        </screen_item>\n                        <screen_item>\n                            <resourcetype>20</resourcetype>\n                            <style>0</style>\n                            <resource>\n                                <name>[1С/Кластер/{#CLSTR_NAME}] Использование активированных лицензий</name>\n                                <host>Template App 1C Enterprise License Server</host>\n                            </resource>\n                            <width>600</width>\n                            <height>200</height>\n                            <x>0</x>\n                            <y>1</y>\n                            <colspan>1</colspan>\n                            <rowspan>1</rowspan>\n                            <elements>0</elements>\n                            <valign>0</valign>\n                            <halign>0</halign>\n                            <dynamic>0</dynamic>\n                            <sort_triggers>0</sort_triggers>\n                            <url/>\n                            <application/>\n                            <max_columns>2</max_columns>\n                        </screen_item>\n                    </screen_items>\n                </screen>\n            </screens>\n        </template>\n        <template>\n            <template>Template App 1C License Files</template>\n            <name>Template App 1C License Files</name>\n            <description>Мониторинг файлов программных лицензий 1С</description>\n            <groups>\n                <group>\n                    <name>Templates/Kaminsoft</name>\n                </group>\n            </groups>\n            <applications>\n                <application>\n                    <name>[1С] Информация</name>\n                </application>\n                <application>\n                    <name>[1С] Программные лицензии</name>\n                </application>\n            </applications>\n            <items>\n                <item>\n                    <name>[1С/Лицензии] Число клиентских лицензий</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.licenses.clients</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:\\d+:(\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.licenses.info</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Сводная информация</name>\n                    <key>1c.licenses.info</key>\n                    <delay>1h</delay>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Лицензии] Число серверных лицензий</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.licenses.servers</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Программные лицензии</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>summary:(\\d+):(\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.licenses.info</key>\n                    </master_item>\n                </item>\n            </items>\n            <discovery_rules>\n                <discovery_rule>\n                    <name>[1C/Лицензии] Файлы лицензий</name>\n                    <key>1c.licenses.discovery</key>\n                    <delay>1h</delay>\n                    <item_prototypes>\n                        <item_prototype>\n                            <name>[1С/Лицензии] Состояние файла лицензии ({#FILE})</name>\n                            <key>1c.license.check[{#PIN}-{#NUMBER}]</key>\n                            <delay>1h</delay>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{str(Ok,#3)}=0</expression>\n                                    <name>[1С/Лицензии] Файл лицензии {#FILE} не прошел проверку</name>\n                                    <priority>HIGH</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Лицензии] Срок действия ({#FILE})</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.license.deadline[{#FILE}]</key>\n                            <delay>0</delay>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>{#FILE}:\\w+:(.*)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.licenses.info</key>\n                            </master_item>\n                            <trigger_prototypes>\n                                <trigger_prototype>\n                                    <expression>{date()}&gt;{last()}</expression>\n                                    <name>[1С/Лицензии] Истек срок действия лицензии ({#FILE})</name>\n                                    <priority>HIGH</priority>\n                                </trigger_prototype>\n                            </trigger_prototypes>\n                        </item_prototype>\n                        <item_prototype>\n                            <name>[1С/Лицензии] Тип лицензии ({#FILE})</name>\n                            <type>DEPENDENT</type>\n                            <key>1c.license.type[{#FILE}]</key>\n                            <delay>0</delay>\n                            <trends>0</trends>\n                            <value_type>TEXT</value_type>\n                            <applications>\n                                <application>\n                                    <name>[1С] Программные лицензии</name>\n                                </application>\n                            </applications>\n                            <preprocessing>\n                                <step>\n                                    <type>REGEX</type>\n                                    <params>{#FILE}:(\\w+)\n\\1</params>\n                                </step>\n                            </preprocessing>\n                            <master_item>\n                                <key>1c.licenses.info</key>\n                            </master_item>\n                        </item_prototype>\n                    </item_prototypes>\n                </discovery_rule>\n            </discovery_rules>\n        </template>\n    </templates>\n    <triggers>\n        <trigger>\n            <expression>{Template App 1C Enterprise License Server:1c.ls.license.used.last()}&gt;={Template App 1C Enterprise License Server:1c.licenses.clients.last()}</expression>\n            <name>[1С/Лицензии] Использованы все доступные клиентские лицензии</name>\n            <priority>HIGH</priority>\n            <manual_close>YES</manual_close>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise License Server:1c.ls.license.used.last()}/{Template App 1C Enterprise License Server:1c.licenses.clients.last()}&gt;{$LIC_UTIL_LIMIT}</expression>\n            <name>[1С/Лицензии] Количество использованных лицензий близко к максимальному</name>\n            <priority>AVERAGE</priority>\n            <manual_close>YES</manual_close>\n            <dependencies>\n                <dependency>\n                    <name>[1С/Лицензии] Использованы все доступные клиентские лицензии</name>\n                    <expression>{Template App 1C Enterprise License Server:1c.ls.license.used.last()}&gt;={Template App 1C Enterprise License Server:1c.licenses.clients.last()}</expression>\n                </dependency>\n            </dependencies>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise License Server:1c.ls.license.client.last()}/{Template App 1C Enterprise License Server:1c.ls.license.total.last()}&gt;0.5</expression>\n            <name>[1С/Лицензии] Количество лицензий с клиентских компьютеров &gt; 50%</name>\n            <status>DISABLED</status>\n            <priority>WARNING</priority>\n            <manual_close>YES</manual_close>\n        </trigger>\n    </triggers>\n    <graphs>\n        <graph>\n            <name>[1С/Лицензии] Использование активированных лицензий</name>\n            <height>300</height>\n            <ymin_type_1>FIXED</ymin_type_1>\n            <graph_items>\n                <graph_item>\n                    <drawtype>GRADIENT_LINE</drawtype>\n                    <color>1B5E20</color>\n                    <item>\n                        <host>Template App 1C Enterprise License Server</host>\n                        <key>1c.ls.license.used</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <color>FFFFFF</color>\n                    <item>\n                        <host>Template App 1C Enterprise License Server</host>\n                        <key>1c.ls.license.uniq</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <color>FC6EA3</color>\n                    <item>\n                        <host>Template App 1C Enterprise License Server</host>\n                        <key>1c.ls.license.client</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>3</sortorder>\n                    <color>6C59DC</color>\n                    <item>\n                        <host>Template App 1C Enterprise License Server</host>\n                        <key>1c.ls.license.webclient</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>4</sortorder>\n                    <color>F7941D</color>\n                    <item>\n                        <host>Template App 1C Enterprise License Server</host>\n                        <key>1c.ls.license.total</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>5</sortorder>\n                    <color>FF0000</color>\n                    <item>\n                        <host>Template App 1C Enterprise License Server</host>\n                        <key>1c.licenses.clients</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n    </graphs>\n</zabbix_export>\n"
  },
  {
    "path": "1c_work_server.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export>\n    <version>4.4</version>\n    <date>2023-07-07T07:48:53Z</date>\n    <groups>\n        <group>\n            <name>Templates/Applications</name>\n        </group>\n        <group>\n            <name>Templates/Kaminsoft</name>\n        </group>\n    </groups>\n    <templates>\n        <template>\n            <template>Template App 1C Enterprise Work Server</template>\n            <name>Template App 1C Enterprise Work Server</name>\n            <description>Шаблон для мониторинга рабочего сервера 1С Предприятия&#13;\n&#13;\nПодробнее https://slothfk.github.io/1c_zabbix_template_ce/</description>\n            <groups>\n                <group>\n                    <name>Templates/Applications</name>\n                </group>\n                <group>\n                    <name>Templates/Kaminsoft</name>\n                </group>\n            </groups>\n            <applications>\n                <application>\n                    <name>[1С] Информация</name>\n                </application>\n                <application>\n                    <name>[1С] Ошибки</name>\n                </application>\n                <application>\n                    <name>[1С] Производительность</name>\n                </application>\n                <application>\n                    <name>[1С] Управляемые блокировки</name>\n                </application>\n                <application>\n                    <name>[1С] Устойчивость системы</name>\n                </application>\n            </applications>\n            <items>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE} по суммарному количеству</name>\n                    <key>1c.ws.calls[{$LOG_DIR},count,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE}  по суммарному процессорному времени</name>\n                    <key>1c.ws.calls[{$LOG_DIR},cpu,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE} по суммарной длительности</name>\n                    <key>1c.ws.calls[{$LOG_DIR},duration,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE} по средней длительности</name>\n                    <key>1c.ws.calls[{$LOG_DIR},dur_avg,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE} по суммарному вводу-выводу</name>\n                    <key>1c.ws.calls[{$LOG_DIR},iobytes,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE} &quot;ленивых&quot; вызовов</name>\n                    <key>1c.ws.calls[{$LOG_DIR},lazy,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Серверные вызовы] ТОП{$TOP_LIST_SIZE} по максимальной памяти за вызов</name>\n                    <key>1c.ws.calls[{$LOG_DIR},memory,{$TOP_LIST_SIZE}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Рабочий сервер] Ошибки процессов</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ws.excps[{$LOG_DIR}]</key>\n                    <delay>1h</delay>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                        <application>\n                            <name>[1С] Ошибки</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Блокировки] Число взаимоблокировок</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.locks.deadlock</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Управляемые блокировки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>deadlock: (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.locks[{$LOG_DIR},{$MAX_LOCK_WAIT},{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                    <triggers>\n                        <trigger>\n                            <expression>{last()}&gt;0</expression>\n                            <name>[1С/Блокировки] Обнаружены взаимоблокировки</name>\n                            <priority>HIGH</priority>\n                        </trigger>\n                    </triggers>\n                </item>\n                <item>\n                    <name>[1С/Блокировки] Число блокировок</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.locks.lock</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Управляемые блокировки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>lock: (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.locks[{$LOG_DIR},{$MAX_LOCK_WAIT},{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                    <triggers>\n                        <trigger>\n                            <expression>{last()}=0</expression>\n                            <name>[1С/Блокировки] Отсутствуют блокировки</name>\n                            <priority>INFO</priority>\n                        </trigger>\n                    </triggers>\n                </item>\n                <item>\n                    <name>[1С/Блокировки] Число таймаутов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.locks.timeout</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Управляемые блокировки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>timeout: (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.locks[{$LOG_DIR},{$MAX_LOCK_WAIT},{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                    <triggers>\n                        <trigger>\n                            <expression>{last()}&gt;0</expression>\n                            <name>[1С/Блокировки] Обнаружены таймауты</name>\n                            <priority>HIGH</priority>\n                        </trigger>\n                    </triggers>\n                </item>\n                <item>\n                    <name>[1С/Блокировки] Общее ожидание на блокировках</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.locks.wait</key>\n                    <delay>0</delay>\n                    <value_type>FLOAT</value_type>\n                    <units>s</units>\n                    <applications>\n                        <application>\n                            <name>[1С] Управляемые блокировки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>wait: (\\d+.?\\d*)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.locks[{$LOG_DIR},{$MAX_LOCK_WAIT},{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </master_item>\n                    <triggers>\n                        <trigger>\n                            <expression>{last()}&gt;{$MAX_LOCK_WAIT}</expression>\n                            <name>[1С/Блокировки] Превышено пороговое значение ожидания на блокировках</name>\n                            <priority>HIGH</priority>\n                        </trigger>\n                    </triggers>\n                </item>\n                <item>\n                    <name>[1С/Блокировки] Сводка</name>\n                    <key>1c.ws.locks[{$LOG_DIR},{$MAX_LOCK_WAIT},{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <delay>1h</delay>\n                    <trends>0</trends>\n                    <status>DISABLED</status>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                        <application>\n                            <name>[1С] Управляемые блокировки</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Рабочий сервер] Объем памяти процессов</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ws.memory</key>\n                    <delay>30s</delay>\n                    <history>0</history>\n                    <trends>0</trends>\n                    <value_type>TEXT</value_type>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Рабочий процесс] Доступная производительность</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ws.perfs[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    <value_type>FLOAT</value_type>\n                    <description>Среднее значение доступной производительности рабочих процессов данного сервера</description>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Агент сервера] Число процессов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.ragent.count</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>ragent: (\\d+) \\d+ \\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Агент сервера] Режим отладки</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.ragent.debug</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Информация</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>ragent: \\d+ \\d+ (\\d)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                    <triggers>\n                        <trigger>\n                            <expression>{last()}=1</expression>\n                            <name>[1С/Рабочий сервер] Включен режим отладки</name>\n                            <priority>AVERAGE</priority>\n                        </trigger>\n                    </triggers>\n                </item>\n                <item>\n                    <name>[1С/Агент сервера] Количество исключений</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.ragent.excps</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Ошибки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>ragent: (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.excps[{$LOG_DIR}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Агент сервера] Объем памяти всех процессов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.ragent.memory</key>\n                    <delay>0</delay>\n                    <units>B</units>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>ragent: \\d+ (\\d+) \\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Рабочий сервер] Объем памяти сервера</name>\n                    <type>ZABBIX_ACTIVE</type>\n                    <key>1c.ws.ram</key>\n                    <delay>1h</delay>\n                    <units>B</units>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                </item>\n                <item>\n                    <name>[1С/Менеджер кластера] Число процессов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rmngr.count</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rmngr: (\\d+) \\d+\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Менеджер кластера] Количество исключений</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rmngr.excps</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Ошибки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rmngr: (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.excps[{$LOG_DIR}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Менеджер кластера] Объем памяти всех процессов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rmngr.memory</key>\n                    <delay>0</delay>\n                    <units>B</units>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rmngr: \\d+ (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Рабочий процесс] Перемены в процессах</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rphost.change</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Устойчивость системы</name>\n                        </application>\n                    </applications>\n                    <valuemap>\n                        <name>[1С/Рабочий процесс] Перемены в процессах</name>\n                    </valuemap>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rphost: \\d+ \\d+ (\\d)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Рабочий процесс] Число процессов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rphost.count</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rphost: (\\d+) \\d+ \\d\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Рабочий процесс] Количество исключений</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rphost.excps</key>\n                    <delay>0</delay>\n                    <applications>\n                        <application>\n                            <name>[1С] Ошибки</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rphost: (\\d+)\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.excps[{$LOG_DIR}]</key>\n                    </master_item>\n                </item>\n                <item>\n                    <name>[1С/Рабочий процесс] Объем памяти всех процессов</name>\n                    <type>DEPENDENT</type>\n                    <key>1c.ws.rphost.memory</key>\n                    <delay>0</delay>\n                    <units>B</units>\n                    <applications>\n                        <application>\n                            <name>[1С] Производительность</name>\n                        </application>\n                    </applications>\n                    <preprocessing>\n                        <step>\n                            <type>REGEX</type>\n                            <params>rphost: \\d+ (\\d+) \\d\n\\1</params>\n                        </step>\n                    </preprocessing>\n                    <master_item>\n                        <key>1c.ws.memory</key>\n                    </master_item>\n                </item>\n            </items>\n            <macros>\n                <macro>\n                    <macro>{$EXCP_THRESHOLD}</macro>\n                    <value>250</value>\n                    <description>Пороговое количество исключений на процесс</description>\n                </macro>\n                <macro>\n                    <macro>{$LOG_DIR}</macro>\n                    <value>/var/log/1C</value>\n                    <description>Каталог технологического журнала</description>\n                </macro>\n                <macro>\n                    <macro>{$MAX_LOCK_WAIT}</macro>\n                    <value>20</value>\n                    <description>Пороговая величина времени ожидания на управляемых блокировках, сек</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_PASS}</macro>\n                    <description>Пароль пользователя администратора кластера</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_PORTS}</macro>\n                    <value>1545</value>\n                    <description>Порты сервиса RAS (если используется несколько сервисов, то указываются через запятую)</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_TIMEOUT}</macro>\n                    <value>1.5</value>\n                    <description>Таймаут ожидания ответа от службы RAS</description>\n                </macro>\n                <macro>\n                    <macro>{$RAS_USER}</macro>\n                    <description>Имя пользователя администратора кластера</description>\n                </macro>\n                <macro>\n                    <macro>{$RPHOST_MAX_MEM}</macro>\n                    <value>0.85</value>\n                    <description>Относительная допустимая величина объема памяти процессов rphost</description>\n                </macro>\n                <macro>\n                    <macro>{$TOP_LIST_SIZE}</macro>\n                    <value>25</value>\n                    <description>Количество записей в TOP-списках</description>\n                </macro>\n            </macros>\n        </template>\n    </templates>\n    <triggers>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}&gt;{Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}&gt;0 or {Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}&gt;{Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}&gt;0</expression>\n            <name>[1С/Агент сервера] Аномальное число процессов</name>\n            <priority>AVERAGE</priority>\n            <dependencies>\n                <dependency>\n                    <name>[1С/Менеджер кластера] Нет запущенных процессов</name>\n                    <expression>{Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}&gt;0</expression>\n                </dependency>\n                <dependency>\n                    <name>[1С/Рабочий процесс] Нет запущенных процессов</name>\n                    <expression>{Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}&gt;0</expression>\n                </dependency>\n            </dependencies>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.ragent.excps.last()}/{Template App 1C Enterprise Work Server:1c.ws.ragent.count.avg(3600)}&gt;{$EXCP_THRESHOLD}</expression>\n            <name>[1С/Агент сервера] Количество исключений свыше {$EXCP_THRESHOLD}</name>\n            <priority>AVERAGE</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}=0 and ({Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}&gt;0 or {Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}&gt;0)</expression>\n            <name>[1С/Агент сервера] Нет запущенных процессов</name>\n            <priority>HIGH</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}=0</expression>\n            <name>[1С/Кластер] Отсутствуют все процессы кластера</name>\n            <priority>HIGH</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rmngr.excps.last()}/{Template App 1C Enterprise Work Server:1c.ws.rmngr.count.avg(3600)}&gt;{$EXCP_THRESHOLD}</expression>\n            <name>[1С/Менеджер кластера] Количество исключений свыше {$EXCP_THRESHOLD}</name>\n            <priority>AVERAGE</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}&gt;0</expression>\n            <name>[1С/Менеджер кластера] Нет запущенных процессов</name>\n            <priority>HIGH</priority>\n            <dependencies>\n                <dependency>\n                    <name>[1С/Кластер] Отсутствуют все процессы кластера</name>\n                    <expression>{Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}=0</expression>\n                </dependency>\n            </dependencies>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rphost.excps.last()}/{Template App 1C Enterprise Work Server:1c.ws.rphost.count.avg(3600)}&gt;{$EXCP_THRESHOLD}</expression>\n            <name>[1С/Рабочий процесс] Количество исключений свыше {$EXCP_THRESHOLD}</name>\n            <priority>AVERAGE</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}&gt;0</expression>\n            <name>[1С/Рабочий процесс] Нет запущенных процессов</name>\n            <priority>HIGH</priority>\n            <dependencies>\n                <dependency>\n                    <name>[1С/Кластер] Отсутствуют все процессы кластера</name>\n                    <expression>{Template App 1C Enterprise Work Server:1c.ws.ragent.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.rmngr.count.last()}=0 and {Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()}=0</expression>\n                </dependency>\n            </dependencies>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rphost.memory.last()}/{Template App 1C Enterprise Work Server:1c.ws.ram.last()}&gt;{$RPHOST_MAX_MEM}</expression>\n            <name>[1С/Рабочий процесс] Превышено пороговое значение используемой памяти</name>\n            <priority>AVERAGE</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rphost.count.avg(5m)}={Template App 1C Enterprise Work Server:1c.ws.rphost.count.last()} and {Template App 1C Enterprise Work Server:1c.ws.rphost.change.count(5m,1)}&gt;=3</expression>\n            <name>[1С/Рабочий процесс] Частые изменения в списке процессов</name>\n            <priority>HIGH</priority>\n        </trigger>\n        <trigger>\n            <expression>{Template App 1C Enterprise Work Server:1c.ws.rmngr.memory.last()}&gt;={Template App 1C Enterprise Work Server:1c.ws.rphost.memory.max(90)}</expression>\n            <name>[1С/Рабочий сервер] Объем памяти rmngr превышает объем rphost</name>\n            <priority>HIGH</priority>\n        </trigger>\n    </triggers>\n    <graphs>\n        <graph>\n            <name>[1С/Рабочий сервер] Объем используемой памяти</name>\n            <graph_items>\n                <graph_item>\n                    <color>FF4000</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ram</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <color>FC6EA3</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ragent.memory</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <color>C7A72D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rmngr.memory</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>3</sortorder>\n                    <color>199C0D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.memory</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>4</sortorder>\n                    <color>6C59DC</color>\n                    <yaxisside>RIGHT</yaxisside>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ragent.count</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>5</sortorder>\n                    <color>BA2A5D</color>\n                    <yaxisside>RIGHT</yaxisside>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rmngr.count</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>6</sortorder>\n                    <color>0040FF</color>\n                    <yaxisside>RIGHT</yaxisside>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.count</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>7</sortorder>\n                    <color>F7941D</color>\n                    <yaxisside>RIGHT</yaxisside>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.change</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n        <graph>\n            <name>[1С/Рабочий сервер] Объем памяти процессов</name>\n            <type>STACKED</type>\n            <ymax_type_1>ITEM</ymax_type_1>\n            <ymax_item_1>\n                <host>Template App 1C Enterprise Work Server</host>\n                <key>1c.ws.ram</key>\n            </ymax_item_1>\n            <graph_items>\n                <graph_item>\n                    <color>199C0D</color>\n                    <yaxisside>RIGHT</yaxisside>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ram</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <color>2774A4</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.memory</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <color>F7941D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rmngr.memory</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>3</sortorder>\n                    <color>F63100</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ragent.memory</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n        <graph>\n            <name>[1С/Рабочий сервер] Ошибки процессов</name>\n            <graph_items>\n                <graph_item>\n                    <color>199C0D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ragent.excps</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <color>F63100</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rmngr.excps</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <color>2774A4</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.excps</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n        <graph>\n            <name>[1С/Рабочий сервер] Процессы сервера</name>\n            <show_triggers>NO</show_triggers>\n            <graph_items>\n                <graph_item>\n                    <color>F63100</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.ragent.count</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>1</sortorder>\n                    <drawtype>BOLD_LINE</drawtype>\n                    <color>2774A4</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rmngr.count</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>2</sortorder>\n                    <color>199C0D</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.count</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>3</sortorder>\n                    <drawtype>BOLD_LINE</drawtype>\n                    <color>F7941D</color>\n                    <yaxisside>RIGHT</yaxisside>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.perfs[{$RAS_PORTS},{$RAS_TIMEOUT},{$RAS_USER},{$RAS_PASS}]</key>\n                    </item>\n                </graph_item>\n                <graph_item>\n                    <sortorder>4</sortorder>\n                    <color>0040FF</color>\n                    <item>\n                        <host>Template App 1C Enterprise Work Server</host>\n                        <key>1c.ws.rphost.change</key>\n                    </item>\n                </graph_item>\n            </graph_items>\n        </graph>\n    </graphs>\n    <value_maps>\n        <value_map>\n            <name>[1С/Рабочий процесс] Перемены в процессах</name>\n            <mappings>\n                <mapping>\n                    <value>0</value>\n                    <newvalue>изменений нет</newvalue>\n                </mapping>\n                <mapping>\n                    <value>1</value>\n                    <newvalue>произошло изменение</newvalue>\n                </mapping>\n            </mappings>\n        </value_map>\n    </value_maps>\n</zabbix_export>\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Alexey Y. Fedotov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "[![CodeFactor](https://www.codefactor.io/repository/github/slothfk/1c_zabbix_template_ce/badge)](https://www.codefactor.io/repository/github/slothfk/1c_zabbix_template_ce)\n\n# 1c_zabbix_template_ce (Community Edition)\nШаблон (конфигурационные файлы агента и вспомогательные скрипты) для мониторинга с помощью Zabbix (версии 4.4) серверов 1С Предприятия, работающих как под управлением операционной системы GNU/Linux так и под MS Windows.\n\n## Основная идея проекта\n* Расследование инцидентов, возникающих в работе сервера 1С Предприятия, с минимальной задержкой от момента их возникновения\n* Хранение минимального объема информации, нобходимого для расследования\n\n## Выбранная архитектура\nШаблон разбит на несколько составляющих по функциональному назначению:\n* Шаблон для мониторинга [рабочего сервера](./docs/work_server.md) 1С Предприятия\n* Шаблон для мониторинга [сервера лицензирования](./docs/license_server.md)\n* Шаблон для мониторинга [центрального сервера](./docs/central_server.md)\n* Шаблон для мониторинга [файлов программных лицензий](./docs/license_files.md)\n\nНеявно подразумевается, что на сервере (объекте мониторинга) запущенна **только одна служба сервера 1С Предприятия** (агент сервера 1С Предприятия). Однако шаблон позволяет собирать информацию одновременно с разных сервисов **RAS** (для чего в макросе **{$RAS_PORTS}** необходимо указывать порты, используемых **RAS** через запятую)\n\n## Установка и обновление\nОписание процесса установки можно найти [здесь](./docs/install.md). Специфика использования скриптов на платформе MS Windows описана [здесь](./docs/windows.md)\n\nТ.к. шаблон находится в состоянии активной разработки (добавляются новые функции, корректируется имеющийся функционал), то может возникнуть ситуация, когда на работающей системе необходимо привести уже развернутый шаблон к актуальному состоянию. К сожалению, на текущий момент универсальной инструкции, позволяющей перейти к актуальной версии, и при этом не потерять накопленные данные, **нет**!\n\n## Статьи о данном шаблоне (с картинками)\n* [Мониторинг количества использованных программных лицензий, выданных выделенным сервером лицензирования](https://infostart.ru/public/1157013/)\n* [Использование Zabbix для сбора информации о серверных вызовах и управляемых блокировках с сервера 1С Предприятия, работающего на платформе GNU/Linux](https://infostart.ru/public/1120500/)\n* [Мониторинг количества использованных клиентских лицензий, выданных сервером 1С Предприятия, работающим на платформе GNU/Linux](https://infostart.ru/public/1114020/)\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-modernist"
  },
  {
    "path": "configs/logcfg.xml",
    "content": "<config xmlns=\"http://v8.1c.ru/v8/tech-log\">\n    <dump create=\"false\"/>\n    <log location=\"{{tech_logs_dir}}/zabbix/locks\" history=\"1\">\n        <event>\n            <eq property=\"name\" value=\"tlock\"/>\n        </event>\n        <event>\n            <eq property=\"name\" value=\"ttimeout\"/>\n        </event>\n        <event>\n            <eq property=\"name\" value=\"tdeadlock\"/>\n        </event>\n        <property name=\"p:processname\"/>\n        <property name=\"t:connectid\"/>\n        <property name=\"waitconnections\"/>\n        <property name=\"deadlockconnectionintersections\"/>\n        <property name=\"regions\"/>\n        <property name=\"locks\"/>\n        <property name=\"context\"/>\n    </log>\n    <log location=\"{{tech_logs_dir}}/zabbix/calls\" history=\"1\">\n        <event>\n            <eq property=\"name\" value=\"call\"/>\n            <ne property=\"context\" value=\"\"/>\n        </event>\n        <event>\n            <eq property=\"name\" value=\"call\"/>\n            <ne property=\"module\" value=\"\"/>\n            <ne property=\"method\" value=\"\"/>\n        </event>\n        <property name=\"p:processname\"/>\n        <property name=\"context\"/>\n        <property name=\"module\"/>\n        <property name=\"method\"/>\n        <property name=\"memorypeak\"/>\n        <property name=\"cputime\"/>\n        <property name=\"inbytes\"/>\n        <property name=\"outbytes\"/>\n    </log>\n    <log location=\"{{tech_logs_dir}}/zabbix/excps\" history=\"1\">\n        <event>\n            <eq property=\"name\" value=\"excp\"/>\n        </event>\n        <property name=\"p:processname\"/>\n        <property name=\"descr\"/>\n        <property name=\"context\"/>\n    </log>\n</config>\n"
  },
  {
    "path": "configs/userparameter_1c-cs.conf",
    "content": "#\n# Мониторинг 1С Предприятия 8.3 (центральный сервер)\n#\n# (c) 2019-2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nUserParameter=1c.cs.sessions[*],/var/lib/zabbix/scripts/1c_central_server.sh sessions $1 $2 $3 $4\nUserParameter=1c.cs.ib.restrictions[*],/var/lib/zabbix/scripts/1c_central_server.sh ib_restrict\n\nUserParameter=1c.cs.clusters.discovery[*],/var/lib/zabbix/scripts/1c_central_server.sh clusters $1 $2 $3 $4\nUserParameter=1c.cs.infobases.discovery[*],/var/lib/zabbix/scripts/1c_central_server.sh infobases $1 $2 $3 $4 $5\nUserParameter=1c.cs.ras.discovery[*],/usr/bin/echo \"$1\" | awk -F, 'BEGIN { print \"{\\\"data\\\":[\" } { for (i=1;i<=NF;i++) { print \"{\\\"{#RAS_PORT}\\\":\\\"\"$i\"\\\"}\"(i<NF?\",\":\"\") } } END { print \"]}\" }'"
  },
  {
    "path": "configs/userparameter_1c-lf.conf",
    "content": "#\n# Мониторинг 1С Предприятия 8.3 (файлы программных лицензий)\n#\n# (c) 2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nUserParameter=1c.license.check[*],/var/lib/zabbix/scripts/1c_license_files.sh check $1\nUserParameter=1c.licenses.info,/var/lib/zabbix/scripts/1c_license_files.sh info\n\nUserParameter=1c.licenses.discovery,/var/lib/zabbix/scripts/1c_license_files.sh list\n"
  },
  {
    "path": "configs/userparameter_1c-ls.conf",
    "content": "#\n# Мониторниг 1С Предприятия 8.3 (сервер лицензирования)\n#\n# (c) 2019-2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nUserParameter=1c.ls.sessions[*],/var/lib/zabbix/scripts/1c_license_server.sh used $1 $2 $3 $4\nUserParameter=1c.ls.process[*],/var/lib/zabbix/scripts/1c_license_server.sh process $1 $2 $3 $4 $5 $6\n\nUserParameter=1c.ls.clusters.discovery[*],/var/lib/zabbix/scripts/1c_license_server.sh clusters $1 $2 $3 $4\nUserParameter=1c.ls.infobases.discovery[*],/var/lib/zabbix/scripts/1c_license_server.sh infobases $1 $2 $3 $4\n"
  },
  {
    "path": "configs/userparameter_1c-ws.conf",
    "content": "#\n# Мониторинг 1С Предприятия 8.3 (рабочий сервер)\n#\n# (c) 2019-2020, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nUserParameter=1c.ws.locks[*],/var/lib/zabbix/scripts/1c_work_server.sh locks $1 $2 $3 $4 $5 $6\nUserParameter=1c.ws.calls[*],/var/lib/zabbix/scripts/1c_work_server.sh calls $1 $2 $3\nUserParameter=1c.ws.memory[*],/var/lib/zabbix/scripts/1c_work_server.sh memory\nUserParameter=1c.ws.ram[*],/var/lib/zabbix/scripts/1c_work_server.sh ram\nUserParameter=1c.ws.excps[*],/var/lib/zabbix/scripts/1c_work_server.sh excps $1\nUserParameter=1c.ws.dump_logs[*],/var/lib/zabbix/scripts/1c_work_server.sh dump_logs $1 $2\nUserParameter=1c.ws.perfs[*],/var/lib/zabbix/scripts/1c_work_server.sh perfomance $1 $2 $3 $4\n"
  },
  {
    "path": "configs/zabbix.sudoers",
    "content": "Defaults: zabbix !requiretty\n\nzabbix  ALL = (usr1cv8) NOPASSWD: /usr/bin/find * -name 1CV8Clst.lst -exec grep DBMS -A1 {} +\n"
  },
  {
    "path": "docs/central_server.md",
    "content": "# Центральный сервер\n\nДля мониторинга роли **Центрального сервера** реализован сбор следующих показателей:\n* Доступность сервиса RAS по сетевому порту.\n* Общее количество сеансов к информационным базам сервера;\n* Количество сеансов фоновых заданий;\n* Количество сеансов веб-сервисов;\n* Количество сеансов http-сервисов;\n* Количество спящих сеансов;\n* Количество активных (находящихся в серверном вызове) сеансов;\n* Максимальная длительность серди текущих интерактивных вызовов;\n* Максимальная длительность среди текущих вызовов фоновых заданий;\n* Максимальная длительность серди текущих вызовов веб-сервисов\n* Максимальная длительность среди текущих вызовов http-сервисов.\n\n**СОВЕТ:** Для надежного получения значений по сеансам необходимо на центральном сервере увеличить таймаут zabbibx-агента в зависимости от количество кластеров под управлением данного центраольного сервера, количества информационных баз и общего количества сеансов. Рекомендуемое значение - **10 сек**.\n\n## Макросы для центрального сервера\nВ шаблоне рабочего сервера есть следующие макросы:\n* **{$RAS_PORTS}** - порт(ы) сервера RAS, для кластера(ов), в котором(ых) данный сервер является центральным (в случае несколькихх значений, они указываются через запятую);\n* **{$RAS_TIMEOUT}** - таймаут ожидания ответа от сервера RAS в секундах;\n* **{$RAS_USER}** - имя пользователя-администратора кластера 1С Предприятия (предполагается, что учетные данные одинаковы для всех отслеживаемых кластеров);\n* **{$RAS_PASS}** - пароль пользователя-администратора кластера 1С Предприятия (предполагается, что учетные данные одинаковы для всех отслеживаемых кластеров);\n* **{$CALL_DUR_THRESHOLD}** - пороговое значение длительности интерактивного вызова.\n\n## Триггеры\nДля отслеживания критичных изменений показателей роли **Центрального сервера** созданы триггеры, срабатывающие при следующих событиях:\n* Сетевой порт сервиса RAS недоступен (не отвечает). Уровень важности - **Высокая**\n\n## Графики\nДля визуализации показателей роли **Центрального сервера** предусмотрены следущие графики:\n* Количество сеансов к информационным базам сервера.\n\n## Правила обнаружения\nВ случае, когда центральный сервер управляет несколькими кластерами 1С Предприятия, для мониторинга сеансов в разрезе данных кластров необходимо активировать соответствующее **правило обнаружения** (по-умолчнию деактивировано). После этого сбор и отображение информации по сеансам станет доступным в разрезе кластеров, управляемых данным сервером лицензирования.\nВместе с тем шаблон центрального сервера имеет **правило обнаружения** для информационных баз, развернутых на данном сервере (по-умолчанию активно), что позвояет собирать и отображать информацию о сеансах в разрезе обнаруженных информационных баз.\nДля информационной базы имеется прототип триггера, сигнализирующий о превышении порогового значения длительности интерактивного вызова.\n\n\n[Назад](../README.md)\n"
  },
  {
    "path": "docs/install.md",
    "content": "# Установка\nНа сервере Zabbix необходимо добавить (экспортировать) файлы шаблонов:\n* 1c_central_server.xml;\n* 1c_work_server.xml;\n* 1c_license_server.xml.\n\nПосле чего назначить необходимый шаблон(ы) хосту, на котором работает 1С Предприятие. В шаблонах имеются макросы, позволяющие задавать требуемые пороги реагирования Zabbix (срабатывания триггеров).\n\n## Установка вручную\nНа сервер с 1С Предприятием необходимо поместить:\n* все скрипты из каталога **scripts** (например в каталог **/var/lib/zabbix/scripts**) и установить для них права на выполнение;\n* все файлы **userparameter_1c-*.conf** из каталога **configs** в кататалог **/etc/zabbix/zabbix_agentd.d** (если скрипты помещены в каталог отличный от указанного в предыдущем пункте, необходимо в данных файлах скорректировать пути до соответствующих скриптов) и выполнить перезапуск сервиса **zabbix-agent**\n\nТак же необходимо создать каталог для файлов технологического журнала (по-умолчанию **/var/log/1C**), в котором должен быть создан каталог **zabbix** с вложенным каталогом **problem_log**. Таким образом, в рабочей системе структура каталогов и права на них выглядят следующим образом\n<pre>$ ls -al /var/log/1C/zabbix/\nитого 24\ndrwxr-xr-x 6 usr1cv8 grp1cv8 4096 Feb 25 12:29 .\ndrwxr-xr-x 4 root    root    4096 Feb 25 12:29 ..\ndrwxr-xr-x 2 usr1cv8 grp1cv8 4096 Aug 27  2019 calls\ndrwxr-xr-x 2 usr1cv8 grp1cv8 4096 Feb 25 12:29 excps\ndrwxr-xr-x 2 usr1cv8 grp1cv8 4096 Aug 27  2019 locks\ndrwxr-xr-x 2 zabbix  grp1cv8 4096 Aug 27  2019 problem_log\n</pre>\n\nДобавить пользователя **zabbix** в группу **grp1cv8**, чтобы скрипт, запущенный **zabbix-agent** мог прочитать файлы технологического журнала\n<pre>$ sudo usermod -a -G grp1cv8 zabbix</pre>\n\nПомимо этого, на центральном сервере кластера должен быть запущен сервис **RAS**, для запуска которого можно воспользоваться юнитом **systemd**, взятым [здесь](https://github.com/slothfk/1c_systemd/blob/master/srv1cv8-ras.service)\n\n## Установка с помощью ansible\nЕсли в рабочем окружении используется **ansible**, то для развертывания шаблона на сервера с **CentOS** можно воспользоваться сценарием **playbooks/install.yml**. Для этого требуется создать файл **inventory** по примеру **playbooks/inventory.sample**, добавив в соответствующие группы (**srv1c_cs**, **srv1c_ls** и **srv1c_ws**) \"нужные\" сервера\n\n## Общие замечания\nНе зависимо от способа развертывания, для включения сбора технологического журнала 1С, необходимого для целей мониторинга, следует из файла **configs/logcfg.xml** перенести секции **log** в файл **logcfg.xml** рабочего сервера 1С Предприятия (или просто скопировать его в каталог /opt/1C/v8.3/тип_архитектуры/conf/, если сбор ТЖ ранее не использовался).\n\n**ВАЖНО:** В шаблоне в основном используеются элементы данных, получающие данные от активного агента **Zabbix**. В связи с этим необходимо в настройках агента **Zabbix** (в файле конфигурации abbix_agentd.conf скорректировать строку\n<pre>ServerActive=127.0.0.1</pre>\nуказав в ней **ip**-адрес или доменное имя вашего сервера **Zabbix**.\nВместе с тем параметр <code>Hostname=</code> должен иметь такое же значение какое имеет этот узел мониторинга на сервере **Zabbix**!\nВ противном случае, **Zabbix** сервер не сможет корректно обработать поступающие к нему данные!\n\n**ВАЖНО:** Для корректной работы скриптов на сервере 1С Предприятия должны быть установлены следующие программы: zabbix-sender и zabbix-get. Так же должен быть запущен RAS на центральном сервере кластера.\n\n**ВАЖНО:** В случае многосерверного кластера 1С Предприятия, для корректной работы механизма сохранения файлов \"проблемного\" технологического журнала, необходимо на всех серверах, входящих в кластер, в настройке **Server** агента zabbix указать все сервера, входящие в кластер. Например, для кластера из двух серверов (**server_a** и **server_b**) на обоих серверах данная настройка агента zabbix должна выглядеть следующим образом:\n<pre>Server=server_zabbix,server_a,server_b</pre>\n\n**ВАЖНО:** В случае использования шаблона на **Debian**-like операционных системах, необходимо заменить, установленный  в системе по-умолчанию **mawk**, на **gawk**, так как в скриптах [сервера лицензирования](./license_server.md) используются специфичные для **gawk** \"конструкции\" (подробнее см. #69)\n\n[Назад](../README.md)\n"
  },
  {
    "path": "docs/license_files.md",
    "content": "# Файлы программных лицензий\n\nДля мониторинга **файлов программных лицензий** на наблюдаемом сервере необходимо наличие утилиты **license-tools** (см. на ИТС, например https://its.1c.ru/db/v8323doc#bookmark:adm:TI000000679) \n\nВ шаблоне реализован сбор следующих показателей:\n* Число серверных лицензий;\n* Число клиентских лицензий.\n\n**ВАЖНО:** Шаблон используется в составе шаблона [сервера лицензирования](./license_server.md), но так же может быть использован самостоятельно (например на [рабочих серверах](./work_server.md) для отслеживания состояния серверных лицензий)!\n\n## Правила обнаружения\nШаблон имеет правило обнаружения файлов программных лицензий, которое формирует список лицензий на основе выдачи `ring license list`\n\nПо каждому обнаруженному файлу лицензии собираются следующие показатели:\n* Тип лицензи (серверная или клиентская, для клиентской указыватеся номинал)\n* Срок действия лицензии\n* Результат проверки лицензии командой `ring license validate`\n\n**ВАЖНО:** Первые два элемента данных собираются на основе информации, содержащейся в файле лицензии (так было не всегда, посему может работать некорректно)\n\nСоответственно по каждому обнаруженному файлу лицензии есть следующие триггеры:\n* Файл не прошел проверку\n* Срок действия лицензии истек\n\n[Назад](../README.md)\n"
  },
  {
    "path": "docs/license_server.md",
    "content": "# Сервер лицензирования\n\nШаблон **сервера лицензирования** является зависимым от шаблона [файлов программных лицензий](./license_files.md)\n\nДля мониторинга роли **Сервера лицензирования** реализован сбор следующих показателей:\n* Общее количество сеансов на серверах кластера, в котором участвует данный сервер лицензирования;\n* Количество файлов клиентских лицензий, активированных на данном сервере (только клиентские лицензии ПРОФ и КОРП);\n* Количество сеансов лицензируемых клиентскими (программными) лицензиями, активированными на данном сервере;\n* Количество сеансов лицензируемых клиентскими лицензиями с пользовательских компьютеров;\n* Количество сеансов использующих веб-клиент;\n* Количество использованных лицензий (выданных данным сервером);\n* Проверка на отключение от кластеров, в которые включен сервер лицензирования.\n\n**СОВЕТ:** Для надежного получения значений по сеансам необходимо на сервере лицензирования увеличить таймаут zabbix-агента в зависимости от количества кластеров, в состав которых входит сервер лицензирования, количества информационных баз и общего количества сеансов. Рекомендуемое значение - **10 сек**.\n\n## Макросы для сервера лицензирования\nВ шаблоне сервера лицензирования есть следующие макросы:\n* **{$RAS_PORTS}** - порт(ы) сервера RAS, для кластера(ов), в котором(ых) данный сервер является центральным (в случае несколькихх значений, они указываются через запятую);\n* **{$RAS_TIMEOUT}** - максимальное время ожидание ответа сервиса RAS, указанное в секундах;\n* **{$RAS_USER}** - имя пользователя (администратора кластера), необходимое для получения данных от сервиса RAS;\n* **{$RAS_PASS}** - пароль пользователя (администратора кластера);\n* **{$LIC_UTIL_LIMIT}** - значение отношения количества использованных лицензий к количеству сеансов, лицензируемых клиентскими лицензиями, активированными на данном сервере, по превышении которого срабатывает триггер с предупреждением о скором исчерпании имеющихся лицензий.\n\n## Тригеры\nДля отслеживания критичных изменений показателей роли **Сервера лицензирования** созданы триггеры, срабатывающие при следующих событиях:\n* Количество лицензий, выданных данным сервером лицензирования, превышает пороговое значение, регулируемое макросом **{$LIC_UTIL_LIMIT}**. Уровень важности - **Предупреждение**;\n* Использованы все активированные лицензии, т.е. количество сеансов с лицензией, выданной данным сервером лицензирования, равно количеству клиентских лицензий активированных на данном сервере. Уровень важности - **Высокая**;\n* При работе с кластером 1С Предприятия используются локальные пользовательские лицензии (по-умолчанию деактивирован). Уровень важности - **Информация**;\n* Количество локальных пользовательских лицензий превышает 50% (по-умолчанию деактивирован). Уровень важности - **Предупреждение**;\n* Отключение от кластера, в состав которого включен сервер лицензирования. Уровень важности - **Высокая**.\n\n## Графики\nДля визуализации показателей роли **Cервера лицензирования** предусмотрены следущие графики:\n* Использование активированных лицензий<br>\n![screen](./imgs/1c_ls_lic_util.gif)\n\n## Правила обнаружения\nДля отслеживания использования клиентских лицензий, выдаваемых сервером лицензирования реализованы следующие \"разрезы\":\n* Если сервер лицензирования входит в состав нескольких кластеров 1С Предприятия и требуется сбор данных в разрезе кластров, необходимо активировать соответствующее **правило обнаружения** (по-умолчнию деактивировано). После этого собираемые показатели и графики станут доступными в разрезе кластеров, в которых принимает участие данный сервер лицензирования;\n* Если требуется сбор данных в разрезе информационных баз, необходимо активировать соответствующее **правило обнаружения** (по-умолчнию деактивировано). После этого собираемые показатели и графики станут доступными в разрезе всех информационных баз всех кластеров, в состав которых включен данный сервер лицензирования.\n\n## Комплексные экраны\nВ шаблон сервера лицезирования включены два комплексных экрана:\n* Использование активированных лицензий по кластерам;\n* Использование активированных лицензий по информационным базам.\n\nДанные экраны строятся автоматически и включают общий график по утилизации лицензий, а так же все графики в контексте выбранного \"разреза\"\n\n[Назад](../README.md)\n"
  },
  {
    "path": "docs/windows.md",
    "content": "# Что делать, если у меня MS Windows?\n\nНе смотря на то, что изначально шаблон создавался для платформы GNU/Linux, в файлы скриптов были внесены необходимымые изменения, которые позволяют использовать их на платформе MS Windows.\n\n## Что необходимо сделать?\n\n* Установить на сервер, который требуется мониторить, **Git Bash** - https://gitforwindows.org/\n* Поместить файлы **userparameter_1c-*.conf** из каталога **configs** в каталог **C:\\Program Files\\Zabbix Agent\\zabbix_agentd.conf.d** (или в какой другой, куда установлен **zabbix-agent**)\n* Поместить все файлы скриптов из каталога **scripts** в каталог, к примеру, **C:\\Program Files\\Zabbix Agent\\scripts**\n* Внести правки в файлы **userparameter_1c-*.conf** в части строки вызова скриптов, заменив в каждой строке вызов срипта по аналогии с\n<pre>/var/lib/zabbix/scripts/1c_central_server.sh</pre>\nна следующее\n<pre>\"C:\\Program Files\\Git\\bin\\bash.exe\" \"C:\\Program Files\\Zabbix Agent\\scripts\\1c_central_server.sh\"</pre>\nобязательно заключая пути в кавычки!\n\n*ВАЖНО:* Указывать имя каталога в макросе *{$LOG_DIR}* требуется в виде\n<pre>/c/Logs</pre>\nвместо привычных\n<pre>C:\\Logs</pre>\nИмена каталогов чувствительны к регистру!\n\nНастроить запуск сервера **RAS**, воспользовавшись для этого, например, информацией из статьи https://infostart.ru/1c/articles/810752/\n\nВсе остальные настройки, касающиеся агента и сервера **Zabbix** делаются ка написано [здесь](./install.md)\n\n[Назад](../README.md)\n"
  },
  {
    "path": "docs/work_server.md",
    "content": "# Рабочий сервер\n\nДля мониторинга роли **Рабочего сервера** реализован сбор следующих показателей:\n* Количество процессов ragent;\n* Суммарный объем памяти всех процессов ragent;\n* Количество исключений (событий EXCP) возникших в процессах ragent;\n* Количество процессов rmngr;\n* Суммарный объем памяти всех процессов rmngr;\n* Количество исключений (событий EXCP) возникших в процессах rmngr;\n* Количество процессов rphost;\n* Суммарный объем памяти всех процессов rphost;\n* Количество исключений (событий EXCP) возникших в процессах rphost;\n* Изменение в списке рабочих процессов;\n* Режим отладки сервера;\n* Количество событий об управляемых блокировках - TLOCK (по-умолчанию деактивирован);\n* Количество таймаутов на управляемых блокировках (по-умолчанию деактивирован);\n* Количество взаимоблокировок на управляемых блокировках (по-умолчанию деактивирован);\n* Суммарное время ожидания на управляемых блокировках (по-умолчанию деактивирован);\n* ТОП серверных вызовов по суммарной длительности (по-умолчанию деактивирован);\n* ТОП серверных вызовов по суммарному процессорному времени (по-умолчанию деактивирован);\n* ТОП серверных вызовов по суммарному вводу-выводу (по-умолчанию деактивирован);\n* ТОП серверных вызовов по средней длительности (по-умолчанию деактивирован);\n* ТОП серверных вызовов по суммарному количеству (по-умолчанию деактивирован);\n* ТОП серверных вызовов по максимальной памяти за вызов (по-умолчанию деактивирован);\n* ТОП \"ленивых\" (с большой длительностью и малым процессорным временем) серверных вызовов (по-умолчанию деактивирован);\n* Объем оперативной памяти сервера.\n\n## Макросы для рабочего сервера\nВ шаблоне рабочего сервера есть следующие макросы:\n* **{$LOG_DIR}** - каталог для хранения файлов технологического журнала;\n* **{$MAX_LOCK_WAIT}** - пороговое значение суммарного времени ожидания на управляемых блокировках за прошедший час, по превышении которого срабатывает триггер, указанное в секундах;\n* **{$TOP_LIST_SIZE}** - количество выдаваемых (сохраняемых) записей в агригированных выборках по серверным вызовам;\n* **{$RAS_PORTS}** - порт(ы) сервера RAS, для кластера(ов), в котором(ых) данный сервер является центральным (в случае несколькихх значений, они указываются через запятую);\n* **{$RAS_TIMEOUT}** - максимальное время ожидание ответа сервиса RAS, указанное в секундах;\n* **{$RAS_USER}** - имя пользователя (администратора кластера), необходимое для получения данных от сервиса RAS;\n* **{$RAS_PASS}** - пароль пользователя (администратора кластера);\n* **{$RPHOST_MAX_MEM}** - пороговое значение суммарного объема памяти, занимаемого процессами rphost, по превышении которого срабатывает триггер;\n* **{$EXCP_THRESHOLD}** - пороговое количество исключений на один процесс, по превышении которого срабатывает триггер.\n\n## Триггеры\nДля отслеживания критичных изменений показателей роли **Рабочего сервера** созданы триггеры, срабатывающие при следующих событиях:\n* Отсутствуют процессы ragent. Уровень важности - **Высокая**;\n* Отсутствуют процессы rmngr. Уровень важности - **Высокая**;\n* Отсутствуют процессы rphost. Уровень важности - **Высокая**;\n* В списке процессов rphost происходят частые измеенния. Уровень важности - **Высокая**;\n* Превышено пороговое значение объема памяти, занимаемого процессами rphost (регулируется макросом {$RPHOST_MAX_MEM}). Уровень важности - **Средняя**;\n* Обнаружены таймауты на управляемых блокировках 1С. Уровень важности - **Высокая**;\n* Обнаружены взаимоблокировки на управляемых блокировках 1С. Уровень важности - **Высокая**;\n* Превышено пороговое значение ожидания на управляемых блокировках 1С, регулируемое макросом {$MAX_LOCK_WAIT}. Уровень важности - **Высокая**;\n* Включен режим отладки. Уровень важности - **Средняя**;\n* Количество исключений по процессам ragent превышает {$EXCP_THRESHOLD}. Уровень важности - **Средняя**;\n* Количество исключений по процессам rmngr превышает {$EXCP_THRESHOLD}. Уровень важности - **Средняя**;\n* Количество исключений по процессам rphost превышает {$EXCP_THRESHOLD}. Уровень важности - **Средняя**;\n* Отсутствуют события TLOCK. Уровень важности - **Информация**.\n\n## Графики\nДля визуализации показателей роли **Рабочего сервера** предусмотрены следущие графики:\n* Количество ошибок по процессам ragent, rmngr и rphost;\n* Объем используемой памяти процессами сервера 1С Предприятия в разрезе ragent, rmngr и rphost.\n\n[Назад](../README.md)\n"
  },
  {
    "path": "playbooks/install.yml",
    "content": "---\n\n- hosts: srv1c\n  become: yes\n  tasks:\n  - name: Check zabbix agent installation\n    shell: \"ZABBIX_COMMAND=$(pgrep -a zabbix_agent) && awk -F= '/^Include=\\\\/etc\\\\// {print $2}' \n      $(echo $ZABBIX_COMMAND | sed -nr 's/.*-c ([^ ]+).*/\\\\1/p') | xargs dirname\"\n    register: 'zabbix_agent_current'\n\n  - name: \n    set_fact:\n      zabbix_configs: '{{ zabbix_agent_current.stdout | default(\"/etc/zabbix/zabbix_agent2.d\") }}'\n\n  - name: Include role tasks by host groups\n    include_role:\n      name: '{{ item }}'\n    when: 'item == \"general\" or inventory_hostname in groups[item]'\n    loop:\n      - 'general'\n      - 'srv1c_cs'\n      - 'srv1c_ls'\n      - 'srv1c_ws'\n\n- hosts: hosts_to_restart\n  gather_facts: no\n  become: yes\n  tasks:\n    - name: Restart zabbix agent\n      service:\n        name: 'zabbix-agent{% if zabbix_configs | regex_search(\"2\") %}2{% endif %}'\n        state: restarted\n"
  },
  {
    "path": "playbooks/inventory.sample",
    "content": "# Общая группа серверов 1С Предприятия\n[srv1c:children]\nsrv1c_cs\nsrv1c_ls\nsrv1c_ws\n\n# Группа центральных серверов 1С Предприятия\n[srv1c_cs]\nlocalhost\n\n# Группа серверов лицензирования 1С Предприятия\n[srv1c_ls]\nlocalhost\n\n# Группа рабочих серверов 1С Предприятия\n[srv1c_ws]\nlocalhost\n"
  },
  {
    "path": "playbooks/roles/general/.travis.yml",
    "content": "---\nlanguage: python\npython: \"2.7\"\n\n# Use the new container infrastructure\nsudo: false\n\n# Install ansible\naddons:\n  apt:\n    packages:\n    - python-pip\n\ninstall:\n  # Install ansible\n  - pip install ansible\n\n  # Check ansible version\n  - ansible --version\n\n  # Create ansible.cfg with correct roles_path\n  - printf '[defaults]\\nroles_path=../' >ansible.cfg\n\nscript:\n  # Basic role syntax check\n  - ansible-playbook tests/test.yml -i tests/inventory --syntax-check\n\nnotifications:\n  webhooks: https://galaxy.ansible.com/api/v1/notifications/"
  },
  {
    "path": "playbooks/roles/general/README.md",
    "content": "Role Name\n=========\n\nA brief description of the role goes here.\n\nRequirements\n------------\n\nAny pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.\n\nRole Variables\n--------------\n\nA description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.\n\nDependencies\n------------\n\nA list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.\n\nExample Playbook\n----------------\n\nIncluding an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:\n\n    - hosts: servers\n      roles:\n         - { role: username.rolename, x: 42 }\n\nLicense\n-------\n\nBSD\n\nAuthor Information\n------------------\n\nAn optional section for the role authors to include contact information, or a website (HTML is not allowed).\n"
  },
  {
    "path": "playbooks/roles/general/defaults/main.yml",
    "content": "---\n# defaults file for general\n"
  },
  {
    "path": "playbooks/roles/general/handlers/main.yml",
    "content": "---\n# handlers file for general\n"
  },
  {
    "path": "playbooks/roles/general/tasks/main.yml",
    "content": "---\n# tasks file for general\n- name: Make directory for template scripts\n  file:\n    path: /var/lib/zabbix/scripts\n    state: directory\n    owner: zabbix\n    group: zabbix\n    mode: 0755\n\n- name: Copy common module script\n  copy:\n    src: 1c_common_module.sh\n    dest: /var/lib/zabbix/scripts/\n    owner: zabbix\n    group: zabbix\n    mode: 0755\n"
  },
  {
    "path": "playbooks/roles/general/tests/inventory",
    "content": "localhost"
  },
  {
    "path": "playbooks/roles/general/tests/test.yml",
    "content": "---\n- hosts: localhost\n  remote_user: root\n  roles:\n    - general"
  },
  {
    "path": "playbooks/roles/general/vars/main.yml",
    "content": "---\n# vars file for general\n"
  },
  {
    "path": "playbooks/roles/srv1c_cs/.travis.yml",
    "content": "---\nlanguage: python\npython: \"2.7\"\n\n# Use the new container infrastructure\nsudo: false\n\n# Install ansible\naddons:\n  apt:\n    packages:\n    - python-pip\n\ninstall:\n  # Install ansible\n  - pip install ansible\n\n  # Check ansible version\n  - ansible --version\n\n  # Create ansible.cfg with correct roles_path\n  - printf '[defaults]\\nroles_path=../' >ansible.cfg\n\nscript:\n  # Basic role syntax check\n  - ansible-playbook tests/test.yml -i tests/inventory --syntax-check\n\nnotifications:\n  webhooks: https://galaxy.ansible.com/api/v1/notifications/"
  },
  {
    "path": "playbooks/roles/srv1c_cs/README.md",
    "content": "Role Name\n=========\n\nA brief description of the role goes here.\n\nRequirements\n------------\n\nAny pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.\n\nRole Variables\n--------------\n\nA description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.\n\nDependencies\n------------\n\nA list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.\n\nExample Playbook\n----------------\n\nIncluding an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:\n\n    - hosts: servers\n      roles:\n         - { role: username.rolename, x: 42 }\n\nLicense\n-------\n\nBSD\n\nAuthor Information\n------------------\n\nAn optional section for the role authors to include contact information, or a website (HTML is not allowed).\n"
  },
  {
    "path": "playbooks/roles/srv1c_cs/defaults/main.yml",
    "content": "---\n# defaults file for 1c_cs\n"
  },
  {
    "path": "playbooks/roles/srv1c_cs/handlers/main.yml",
    "content": "---\n# handlers file for 1c_cs\n\n- name: Add host to group for restart zabbix agent\n  group_by:\n    key: hosts_to_restart\n"
  },
  {
    "path": "playbooks/roles/srv1c_cs/tasks/main.yml",
    "content": "---\n# tasks file for 1c_cs\n\n- name: Copy sudoers file for zabbix user\n  copy:\n    src: zabbix.sudoers\n    dest: /etc/sudoers.d/zabbix\n    owner: root\n    group: root\n    mode: 0440\n\n- name: Copy userparameter for central server\n  copy:\n    src: userparameter_1c-cs.conf\n    dest: '{{ zabbix_configs }}'\n    owner: root\n    group: root\n    mode: 0644\n  notify:\n    - Add host to group for restart zabbix agent\n\n\n- name: Copy main script for central server\n  copy:\n    src: 1c_central_server.sh\n    dest: /var/lib/zabbix/scripts/\n    owner: zabbix\n    group: zabbix\n    mode: 0755\n"
  },
  {
    "path": "playbooks/roles/srv1c_cs/tests/inventory",
    "content": "localhost"
  },
  {
    "path": "playbooks/roles/srv1c_cs/tests/test.yml",
    "content": "---\n- hosts: localhost\n  remote_user: root\n  roles:\n    - 1c_cs"
  },
  {
    "path": "playbooks/roles/srv1c_cs/vars/main.yml",
    "content": "---\n# vars file for 1c_cs\n"
  },
  {
    "path": "playbooks/roles/srv1c_ls/.travis.yml",
    "content": "---\nlanguage: python\npython: \"2.7\"\n\n# Use the new container infrastructure\nsudo: false\n\n# Install ansible\naddons:\n  apt:\n    packages:\n    - python-pip\n\ninstall:\n  # Install ansible\n  - pip install ansible\n\n  # Check ansible version\n  - ansible --version\n\n  # Create ansible.cfg with correct roles_path\n  - printf '[defaults]\\nroles_path=../' >ansible.cfg\n\nscript:\n  # Basic role syntax check\n  - ansible-playbook tests/test.yml -i tests/inventory --syntax-check\n\nnotifications:\n  webhooks: https://galaxy.ansible.com/api/v1/notifications/"
  },
  {
    "path": "playbooks/roles/srv1c_ls/README.md",
    "content": "Role Name\n=========\n\nA brief description of the role goes here.\n\nRequirements\n------------\n\nAny pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.\n\nRole Variables\n--------------\n\nA description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.\n\nDependencies\n------------\n\nA list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.\n\nExample Playbook\n----------------\n\nIncluding an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:\n\n    - hosts: servers\n      roles:\n         - { role: username.rolename, x: 42 }\n\nLicense\n-------\n\nBSD\n\nAuthor Information\n------------------\n\nAn optional section for the role authors to include contact information, or a website (HTML is not allowed).\n"
  },
  {
    "path": "playbooks/roles/srv1c_ls/defaults/main.yml",
    "content": "---\n# defaults file for 1c_ls\n"
  },
  {
    "path": "playbooks/roles/srv1c_ls/handlers/main.yml",
    "content": "---\n# handlers file for 1c_ls\n\n- name: Add host to group for restart zabbix agent\n  group_by:\n    key: hosts_to_restart\n"
  },
  {
    "path": "playbooks/roles/srv1c_ls/tasks/main.yml",
    "content": "---\n# tasks file for 1c_ls\n\n#- name: Install required packages\n- include: \"install-{{ ansible_os_family }}.yml\"\n\n- name: Copy zabbix userparameter files for license server\n  copy:\n    src: '{{ item }}'\n    dest: '{{ zabbix_configs }}'\n    owner: root\n    group: root\n    mode: 0644\n  with_items:\n    - userparameter_1c-ls.conf\n    - userparameter_1c-lf.conf\n  notify:\n    - Add host to group for restart zabbix agent\n\n- name: Copy scripts for license server\n  copy:\n    src: '{{ item }}'\n    dest: /var/lib/zabbix/scripts/\n    owner: zabbix\n    group: zabbix\n    mode: 0755\n  with_items:\n    - 1c_license_server.sh\n    - 1c_license_files.sh"
  },
  {
    "path": "playbooks/roles/srv1c_ls/tests/inventory",
    "content": "localhost"
  },
  {
    "path": "playbooks/roles/srv1c_ls/tests/test.yml",
    "content": "---\n- hosts: localhost\n  remote_user: root\n  roles:\n    - 1c_ls"
  },
  {
    "path": "playbooks/roles/srv1c_ls/vars/main.yml",
    "content": "---\n# vars file for 1c_ls\npackages:\n- zabbix-sender\n"
  },
  {
    "path": "playbooks/roles/srv1c_ws/.travis.yml",
    "content": "---\nlanguage: python\npython: \"2.7\"\n\n# Use the new container infrastructure\nsudo: false\n\n# Install ansible\naddons:\n  apt:\n    packages:\n    - python-pip\n\ninstall:\n  # Install ansible\n  - pip install ansible\n\n  # Check ansible version\n  - ansible --version\n\n  # Create ansible.cfg with correct roles_path\n  - printf '[defaults]\\nroles_path=../' >ansible.cfg\n\nscript:\n  # Basic role syntax check\n  - ansible-playbook tests/test.yml -i tests/inventory --syntax-check\n\nnotifications:\n  webhooks: https://galaxy.ansible.com/api/v1/notifications/"
  },
  {
    "path": "playbooks/roles/srv1c_ws/README.md",
    "content": "Role Name\n=========\n\nA brief description of the role goes here.\n\nRequirements\n------------\n\nAny pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.\n\nRole Variables\n--------------\n\nA description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.\n\nDependencies\n------------\n\nA list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.\n\nExample Playbook\n----------------\n\nIncluding an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:\n\n    - hosts: servers\n      roles:\n         - { role: username.rolename, x: 42 }\n\nLicense\n-------\n\nBSD\n\nAuthor Information\n------------------\n\nAn optional section for the role authors to include contact information, or a website (HTML is not allowed).\n"
  },
  {
    "path": "playbooks/roles/srv1c_ws/defaults/main.yml",
    "content": "---\n# defaults file for 1c_ws\n"
  },
  {
    "path": "playbooks/roles/srv1c_ws/handlers/main.yml",
    "content": "---\n# handlers file for 1c_ws\n\n- name: Add host to group for restart zabbix agent\n  group_by:\n    key: hosts_to_restart\n"
  },
  {
    "path": "playbooks/roles/srv1c_ws/tasks/main.yml",
    "content": "---\n# tasks file for 1c_ws\n\n#- name: Install required packages\n- include: \"install-{{ ansible_os_family }}.yml\"\n\n- name: Copy zabbix userparameter files for work server\n  copy:\n    src: '{{ item }}'\n    dest: '{{ zabbix_configs }}'\n    owner: root\n    group: root\n    mode: 0644\n  with_items:\n    - userparameter_1c-ws.conf\n    - userparameter_1c-lf.conf\n  notify:\n    - Add host to group for restart zabbix agent\n\n- name: Copy scripts for work server\n  copy:\n    src: '{{ item }}'\n    dest: /var/lib/zabbix/scripts/\n    owner: zabbix\n    group: zabbix\n    mode: 0755\n  with_items:\n    - 1c_work_server.sh\n    - 1c_license_files.sh\n\n- name: Make directory for 1C tech log\n  file:\n    name: /var/log/1C\n    owner: usr1cv8\n    group: grp1cv8\n    state: directory\n    mode: 0750\n\n- name: Make directory for 1C tech log\n  file:\n    name: /var/log/1C/zabbix\n    owner: usr1cv8\n    group: grp1cv8\n    state: directory\n    mode: 0750\n\n- name: Make directory for problem log\n  file:\n    name: /var/log/1C/zabbix/problem_log\n    owner: zabbix\n    group: grp1cv8\n    state: directory\n    mode: 0750\n\n- name: Attach zabbix user to 1C group\n  user:\n    name: zabbix\n    groups: grp1cv8\n    append: yes\n\n"
  },
  {
    "path": "playbooks/roles/srv1c_ws/tests/inventory",
    "content": "localhost"
  },
  {
    "path": "playbooks/roles/srv1c_ws/tests/test.yml",
    "content": "---\n- hosts: localhost\n  remote_user: root\n  roles:\n    - 1c_ws"
  },
  {
    "path": "playbooks/roles/srv1c_ws/vars/main.yml",
    "content": "---\n# vars file for 1c_ws\npackages:\n- gawk\n"
  },
  {
    "path": "playbooks/tasks/install-Debian.yml",
    "content": "- name: Install required packages\n  apt:\n    name: '{{ packages }}'\n    state: 'latest'\n"
  },
  {
    "path": "playbooks/tasks/install-RedHat.yml",
    "content": "- name: Install required packages\n  yum:\n    name: '{{ packages }}'\n    state: 'latest'\n"
  },
  {
    "path": "scripts/1c_central_server.sh",
    "content": "#!/bin/bash\n#\n# Мониторинг 1С Предприятия 8.3 (центральный сервер)\n#\n# (c) 2020-2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nWORK_DIR=$(dirname \"${0}\" | sed -r 's/\\\\/\\//g; s/^(.{1}):/\\/\\1/')\n\n# Включить опцию extglob если отключена (используется в 1c_common_module.sh)\nshopt -q extglob || shopt -s extglob\n\nsource \"${WORK_DIR}/1c_common_module.sh\" 2>/dev/null || { echo \"ОШИБКА: Не найден файл 1c_common_module.sh!\" ; exit 1; }\n\nfunction get_clusters_sessions {\n\n    CLSTR_LIST=${1##*#}\n\n    for CURR_CLSTR in ${CLSTR_LIST//;/ }; do\n        get_sessions_list \"${1%#*}\" \"${CURR_CLSTR%%,*}\" | ( if [[ -s ${IB_CACHE} ]]; then\n            awk -v cluster=\"CL#${CURR_CLSTR%%,*}\" -v OFS=':' -F':' \\\n            'FNR==NR{ if ( $0 ~ \"^\"substr(cluster,4) ) { split($0, ib_uuid, \" \"); ss[\"IB#\"ib_uuid[2]]=0; }; next }\n            BEGIN { ss[cluster]=0; } { \n                if ( $0 ~ \"^FMT#\") { \n                    split($0,a,\"#|:\"); for (i in a) { f[a[i]]=i-1 } \n                } else if ( length(f) > 0 ) {\n                    if ( $f[\"app-id\"] ~ /(cl|wc)/ ) { app_id=\"cl\" } else { app_id = $f[\"app-id\"] }\n                    ib_mark=\"IB#\"$f[\"infobase\"];\n                    ss[cluster]++; ss[ib_mark]++;\n                    if ( app_id != \"cl\" ) { sc[app_id,cluster]++; sc[app_id,ib_mark]++ }\n                    if ( $f[\"hibernate\"] == \"yes\" ) { sc[\"hb\",cluster]++; sc[\"hb\",ib_mark]++ }\n                    if ( $f[\"duration-current\"] != 0) {\n                        as[cluster]++; as[ib_mark]++;\n                        if ( asd[app_id,cluster] < $f[\"duration-current\"] ) {\n                            asd[app_id,cluster]=$f[\"duration-current\"]; asd[app_id,ib_mark]=$f[\"duration-current\"];\n\t\t\t                if ( app_id == \"cl\" ) { asu[cluster]=$f[\"user-name\"]\" (\"$f[\"session-id\"]\")\"; asu[ib_mark]=$f[\"user-name\"]\" (\"$f[\"session-id\"]\")\" }\n                        } else if ( asd[app_id,ib_mark] < $f[\"duration-current\"] ) { asd[app_id,ib_mark]=$f[\"duration-current\"];\n\t\t\t                if ( app_id == \"cl\" ) { asu[ib_mark]=$f[\"user-name\"]\" (\"$f[\"session-id\"]\")\"; }\n\t                    }\n                    } \n                } \n            } END { for (i in ss) {\n                    print i,ss[i]?ss[i]:0,sc[\"bg\",i]?sc[\"bg\",i]:0,sc[\"hb\",i]?sc[\"hb\",i]:0,\n                        sc[\"ws\",i]?sc[\"ws\",i]:0,sc[\"hs\",i]?sc[\"hs\",i]:0,as[i]?as[i]:0,\n                        asd[\"cl\",i]?asd[\"cl\",i]:0,asd[\"bg\",i]?asd[\"bg\",i]:0,\n                        asd[\"ws\",i]?asd[\"ws\",i]:0,asd[\"hs\",i]?asd[\"hs\",i]:0,asu[i] } }' \"${IB_CACHE}\" -\n        else\n            awk -v cluster=\"CL#${CURR_CLSTR%%,*}\" -v OFS=':' -F':' \\\n            'BEGIN { ss[cluster]=0; } { \n                if ( $0 ~ \"^FMT#\") { \n                    split($0,a,\"#|:\"); for (i in a) { f[a[i]]=i-1 } \n                } else if ( length(f) > 0 ) {\n                    if ( $f[\"app-id\"] ~ /(cl|wc)/ ) { app_id=\"cl\" } else { app_id = $f[\"app-id\"] }\n                    ss[cluster]++;\n                    if ( app_id != \"cl\" ) { sc[app_id,cluster]++ }\n                    if ( $f[\"hibernate\"] == \"yes\" ) { sc[\"hb\",cluster]++ }\n                    if ( $f[\"duration-current\"] != 0) {\n                        as[cluster]++;\n                        if ( asd[app_id,cluster] < $f[\"duration-current\"] ) {\n                            asd[app_id,cluster]=$f[\"duration-current\"];\n\t\t\t                if ( app_id == \"cl\" ) { asu[cluster]=$f[\"user-name\"]\" (\"$f[\"session-id\"]\")\"; }\n\t                    }\n                    } \n                } \n            } END { for (i in ss) {\n                    print i,ss[i]?ss[i]:0,sc[\"bg\",i]?sc[\"bg\",i]:0,sc[\"hb\",i]?sc[\"hb\",i]:0,\n                        sc[\"ws\",i]?sc[\"ws\",i]:0,sc[\"hs\",i]?sc[\"hs\",i]:0,as[i]?as[i]:0,\n                        asd[\"cl\",i]?asd[\"cl\",i]:0,asd[\"bg\",i]?asd[\"bg\",i]:0,\n                        asd[\"ws\",i]?asd[\"ws\",i]:0,asd[\"hs\",i]?asd[\"hs\",i]:0,asu[i] } }'\n        fi )\n    done\n\n}\n\nfunction get_session_amounts {\n\n    check_clusters_cache\n\n    ( execute_tasks get_clusters_sessions $( pop_clusters_list self ) ) | \\\n        awk -F: -v OFS=':' '{ print $0; \n            if ($1 !~ /^IB/) { sc[\"all\"]+=$2; sc[\"bg\"]+=$3; sc[\"hb\"]+=$4; sc[\"ws\"]+=$5; sc[\"hs\"]+=$6; sc[\"as\"]+=$7;\n                if ( asd[\"cl\"] < $8 ) { asd[\"cl\"]=$8; } \n                if ( asd[\"bg\"] < $9 ) { asd[\"bg\"]=$9; } \n                if ( asd[\"ws\"] < $10 ) { asd[\"ws\"]=$10; } \n                if ( asd[\"hs\"] < $11 ) { asd[\"hs\"]=$11; } \n            } } \n            END { print \"summary\",sc[\"all\"]?sc[\"all\"]:0,sc[\"bg\"]?sc[\"bg\"]:0,sc[\"hb\"]?sc[\"hb\"]:0,\\\n                sc[\"ws\"]?sc[\"ws\"]:0,sc[\"hs\"]?sc[\"hs\"]:0,sc[\"as\"]?sc[\"as\"]:0,asd[\"cl\"]?asd[\"cl\"]:0,\\\n                asd[\"bg\"]?asd[\"bg\"]:0,asd[\"ws\"]?asd[\"ws\"]:0,asd[\"hs\"]?asd[\"hs\"]:0 }' | sed 's/<sp>/ /g'\n\n}\n\nfunction get_infobases_restrictions {\n    if [[ -z ${IS_WINDOWS} ]]; then\n        COMMAND_PREFIX=( sudo -u \"${USR1CV8}\" )\n    else \n        COMMAND_PREFIX=()\n    fi\n    get_server_directory | xargs -I server_directory \"${COMMAND_PREFIX[@]}\" find server_directory -maxdepth 2 -name 1CV8Clst.lst -exec grep DBMS -A1 {} + |\n        perl -pe 's/([^}],)\\r?\\n/\\1/' |\n        perl -pe 's/.*{(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}),.+{([01]),([0-9]+),([0-9]+),.+},([01]),.*/IB#\\1,\\2,\\3,\\4,\\5/' | \n        awk -v current_date=\"$(date +%Y%m%d%H%M%S)\" -F, '{ if ( $2 == \"1\" && $3 < current_date && $4 > current_date ) { sl=1 } else { sl=0 }; print $1\",\"sl\",\"$5}'\n}\n\ncase ${1} in\n    sessions) shift; make_ras_params \"${@}\"; get_session_amounts ;;\n    infobases) shift 2; make_ras_params \"${@}\"; get_infobases_list self;;\n    clusters) shift; make_ras_params \"${@}\"; get_clusters_list self ;;\n    ib_restrict) get_infobases_restrictions ;;\n    *) error \"${ERROR_UNKNOWN_MODE}\" ;;\nesac\n"
  },
  {
    "path": "scripts/1c_common_module.sh",
    "content": "#!/bin/bash\n#\n# Мониторинг 1С Предприятия 8.3 (общие переменные и функции)\n#\n# (c) 2019-2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\n# Вывести сообщение об ошибке переданное в аргументе и выйти с кодом 1\nfunction error {\n    echo \"ОШИБКА: ${1}\" >&2 ; exit 1\n}\n\n# Системный пользователь для запуска сервера 1С Предприятия\nexport USR1CV8=\"usr1cv8\"\n\n# Тип операционной системы GNU/Linux или MS Windows\n[[ \"$(uname -s)\" != \"Linux\" ]] && { IS_WINDOWS=1; export IS_WINDOWS; }\n\n# Имя сервера, используемое в кластере 1С Предприятия\n[[ -z ${IS_WINDOWS} ]] && HOSTNAME=$(hostname -s) || HOSTNAME=$(hostname)\nexport HOSTNAME\n\n# Добавление пути к бинарным файлам 1С Предприятия в переменную PATH\nRAC_PATH=\"$( find /opt/1C/ /opt/1cv8/ /c/Program\\ Files*/1cv8/ -regextype awk -regex \".*/rac([.]exe)?\" -name \"rac*\" -print -quit  2>/dev/null )\"\n\nif [[ -n ${RAC_PATH} ]]; then\n    export PATH=\"${PATH}:${RAC_PATH%/*}\"\nelse\n    error \"Не найдена платформа 1С Предприятия!\"\nfi\n\n# Проверить инициализацию переменной TMPDIR\n[[ -z ${TMPDIR} ]] && export TMPDIR=\"/tmp\"\n\n# Файл списка кластеров\nexport CLSTR_CACHE=\"${TMPDIR}/1c_clusters_cache\"\n\n# Параметры взаимодействия с сервисом RAS\nRAS_PORTS=\"1545\"\nRAS_TIMEOUT=\"1.5\"\nRAS_AUTH=\"\"\n\n# Максимальное число параллельных потоков (половина от числа ядер ЦПУ)\nMAX_THREADS=$(( $(nproc) / 2 )) && [[ ${MAX_THREADS} -eq 0 ]] && MAX_THREADS=1 \n\n# Общие для всех скриптов тексты ошибок\nexport ERROR_UNKNOWN_MODE=\"Неизвестный режим работы скрипта!\"\nexport ERROR_UNKNOWN_PARAM=\"Неизвестный параметр для данного режима работы скрипта!\"\n\n# Файл списка информационных баз\nexport IB_CACHE=${TMPDIR}/1c_infobase_cache\n\n# Вывести разделительную строку длинной ${1} из символов ${2}\n# По-умолчанию раделительная строка - это 80 символов \"-\"\nfunction put_brack_line {\n    [[ -n ${1} ]] && LIMIT=${1} || LIMIT=80\n    [[ -n ${2} ]] && CHAR=${2} || CHAR=\"-\"\n\n    printf \"%*s\\n\" \"${LIMIT}\" \"${CHAR}\" | sed \"s/ /${CHAR}/g\"\n}\n\n# Выполнить серию команд ${1} с параметром, являющимся элементом массива ${@}, следующим за ${1}\nfunction execute_tasks {\n    [[ ${#@} -le 1 ]] && exit # Если список задач пуст, то выходим\n    TASK_CMD=${1}\n    shift\n    export -f \"${TASK_CMD?}\"\n    echo \"${@}\" | xargs -d' ' -P${MAX_THREADS} -I task_args bash -c \"${TASK_CMD} \\${@}\" _ task_args\n}\n\n# Проверить наличие ring license и вернуть путь до ring\nfunction check_ring_license {\n    [[ -z ${IS_WINDOWS} ]] && RING_CONF=\"/etc/1C/1CE/ring-commands.cfg\" ||\n         RING_CONF=\"/C/ProgramData/1C/1CE/ring-commands.cfg\"\n    [[ ! -f ${RING_CONF} ]] &&  error \"Не установлена утилита ring!\"\n    LIC_TOOL=$(grep license-tools \"${RING_CONF}\" | sed -r 's/.+file: //; s/\\\\/\\//g; s/^(.{1}):/\\/\\1/')\n\n    [[ -z ${LIC_TOOL} ]] && error \"Не установлена утилита license-tools!\"\n\n    ls \"${LIC_TOOL%\\/*\\/*}\"/*ring*/ring*\n}\n\n# Установить параметры взаимодействия с сервисом RAS\n#  Метод устанавливает значения, указанные в параметрах:\n#  * ${1} - номер порта RAS\n#  * ${2} - максимальное время ожидания ответа RAS\n#  * ${3} - пользователь администратор кластрера\n#  * ${4} - пароль пользователя администратора кластера\nfunction make_ras_params {\n\n    [[ -n ${1} ]] && RAS_PORTS=${1}\n\n    [[ -n ${2} ]] && RAS_TIMEOUT=${2}\n\n    [[ -n ${3} ]] && RAS_AUTH=\"--cluster-user=${3}\"\n    [[ -n ${4} ]] && RAS_AUTH+=\" --cluster-pwd=${4}\"\n\n    export RAS_PORTS RAS_TIMEOUT RAS_AUTH\n\n}\n\n# Сохранить список UUID кластеров во временный файл\nfunction push_clusters_uuid {\n    CURR_CLSTR=$( timeout -s HUP \"${RAS_TIMEOUT}\" rac cluster list \"${1%%:*}:${RAS_PORT}\" 2>/dev/null | \n        awk -v FS=' +: +' '/^($|cluster|name|port)/ { if ($1){ print $2 } else {print \"===\"} }' |\n        awk -v FS='\\n' -v RS='={3}\\n' -v OFS=',' -v ORS=';' '$1=$1' )\n\n    [[ -n ${CURR_CLSTR} ]] && echo \"${1%%:*}:${RAS_PORT}#${CURR_CLSTR}\" | sed 's/,;/;/g'\n}\n\n# Сохранить список кластеров во временный файл\nfunction push_clusters_list {\n\n    if echo ${$} 2>/dev/null > \"${CACHE_FILENAME}.lock\"; then\n        trap 'rm -f \"${CACHE_FILENAME}.lock\"; exit ${?}' INT TERM EXIT\n        execute_tasks push_clusters_uuid \"${@}\" |\n        if [[ -z ${IS_WINDOWS} ]]; then cat; else iconv -f CP866 -t UTF-8; fi >| \"${CACHE_FILENAME}\"\n        rm -f \"${CACHE_FILENAME}.lock\"\n    fi\n\n}\n\n# Вывести список кластеров из временных файлов:\n#  - если в первом параметре указано self, то выводится только список кластеров текущего сервера\nfunction pop_clusters_list {\n\n    find \"${TMPDIR}\" -maxdepth 1 -regextype awk -regex \".*_(${RAS_PORTS//,/|})\" -name \"$( basename \"${CLSTR_CACHE}\" )_*\" |\n        grep -qv \"^$\" || error \"Не найдено ни одного файла списка кластеров!\"\n\n    # ВАЖНО: Для этого блока включается extglob (возможно имеет смысл переделать)\n    if [[ -n ${1} && ${1} == \"self\" ]]; then\n        grep -i \"^${HOSTNAME}\" \"${CLSTR_CACHE}_\"?(${RAS_PORTS//,/|}) | sed -re 's/^([/][^:]+:)?//'\n    else\n        cat \"${CLSTR_CACHE}_\"?(${RAS_PORTS//,/|}) \n    fi | sed 's/ /<sp>/g; s/\"//g'\n\n}\n\n# Вывести список кластеров в формате json:\n#  - если в первом параметре указано self, то выводится только список кластеров текущего сервера\nfunction get_clusters_list {\n\n    pop_clusters_list \"${1}\" | awk -F, -v RS=\";\\n?\" -v ORS=\"\" 'BEGIN {print \"{\\\"data\\\":[\" }\n        { sub(\".*#\",\"\"); print (NR!=1?\",\":\"\")\"{\\\"{#CLSTR_UUID}\\\":\\\"\"$1\"\\\",\\\"{#CLSTR_NAME}\\\":\\\"\"$3\"\\\"}\" }\n        END {ORS=\"\\n\"; print \"]}\" }' | sed 's/<sp>/ /g'\n\n}\n\n# Проверить актуальность файла списка кластеров\nfunction check_clusters_cache {\n\n    # Получим список менеджеров кластеров, в которых участвует данный сервер, следующего вида:\n    #   <имя_сервера>:<номер_порта_0>[|<номер_порта_1>[|..<номер_порта_N>]]\n    readarray -t RMNGR_LIST < <( if [ -z \"${IS_WINDOWS}\" ]; then pgrep -ax rphost; else\n        wmic path win32_process where \"caption like 'rphost%'\" get CommandLine /format:csv | grep rphost; fi |\n        sed -r 's/.*-regport ([^ ]+).*/\\0|\\1/; s/.*-reghost ([^ ]+).*\\|/\\1:/' | sort -u |\n        awk -F: '{ if ( clstr_list[$1]== \"\" ) { clstr_list[$1]=$2 } \\\n            else { clstr_list[$1]=clstr_list[$1]\"|\"$2 } } \\\n            END { for ( i in clstr_list ) { print i\":\"clstr_list[i]} }' )\n\n    # Проверка необходимости обновления временного файла:\n    #   - если временный файл не существует\n    #   - если количество строк во временном файле отличается от количества элементов\n    #     списка менеджеров кластеров\n    #   - если временный файл старше 1 часа\n    set -o noclobber\n    for RAS_PORT in ${RAS_PORTS//,/ }; do\n        CACHE_FILENAME=\"${CLSTR_CACHE}_${RAS_PORT}\"\n        export RAS_PORT CACHE_FILENAME\n        if [[ -e ${CACHE_FILENAME} ]]; then\n            if [[ ${1} == \"lost\" ]]; then\n                cp \"${CACHE_FILENAME}\" \"${CACHE_FILENAME}.${$}\" && trap 'rm -f \"${CACHE_FILENAME}.${$}\"; exit ${?}' INT TERM EXIT\n                for CURR_RMNGR in \"${RMNGR_LIST[@]}\"; do\n                    CURR_LOST=$( grep \"^${CURR_RMNGR%:*}\" \"${CACHE_FILENAME}.${$}\" | \\\n                        sed -re \"s/[^:^;]+,(${CURR_RMNGR#*:}),[^;]+;//\" )\n                    sed -i -re \"s/^${CURR_RMNGR%:*}.*$/${CURR_LOST}/; /[^:]+:$/d\" \"${CACHE_FILENAME}.${$}\"\n                done\n                grep -v \"^$\" \"${CACHE_FILENAME}.${$}\" || [[ ${#RMNGR_LIST[@]} -ne $(grep -vc \"^$\" \"${CACHE_FILENAME}\") ]] && \n                    push_clusters_list \"${RMNGR_LIST[@]}\"\n                rm -f \"${CACHE_FILENAME}.${$}\" &>/dev/null   \n            elif [[ ${#RMNGR_LIST[@]} -ne $(grep -vc \"^$\" \"${CACHE_FILENAME}\") ||\n                $(date -r \"${CACHE_FILENAME}\" \"+%s\") -lt $(date -d \"last hour\" \"+%s\") ]]; then\n                push_clusters_list \"${RMNGR_LIST[@]}\"\n            fi\n        else\n            push_clusters_list \"${RMNGR_LIST[@]}\"\n        fi\n    done\n\n}\n\n# Доступная производительность процессов рабочих серверов\n# Выводит список:\n#   <имя_хоста>:<средняя_производительность>\nfunction get_processes_perfomance {\n\n    CLSTR_LIST=${1#*#}\n\n    for CURR_CLSTR in ${CLSTR_LIST//;/ }; do\n        timeout -s HUP \"${RAS_TIMEOUT}\" rac process list \"--cluster=${CURR_CLSTR%%,*}\" \\\n            ${RAS_AUTH} \"${1%#*}\" 2>/dev/null | \\\n            awk '/^(host|available-perfomance|$)/' | perl -pe \"s/.*: ([^.]+).*\\n/\\1:/\" | \\\n            awk -F: '{ apc[$1]+=1; aps[$1]+=$2 } END { for (i in apc) { print i\":\"aps[i]/apc[i] } }'\n    done\n\n}\n\n# Получить каталоги серверов 1С\nfunction get_server_directory {\n    if [ -z \"${IS_WINDOWS}\" ]; then\n        pgrep -a ragent | sed -r 's/.*-d ([^ ]+).*/\\1/'\n    else\n        wmic path win32_process where \"caption like 'ragent.exe'\" get commandline /format:csv | \\\n            awk -F, '/ragent/ { print $2 }' | sed -re 's/.*-d \"([^\"]+).*/\\1/; s/^/\\//; s/\\\\/\\//g; s/://'\n    fi | sed -re 's/(.*)[/]$/\\1/' | sort -u | grep -v \"^$\"\n    #TODO: Возможно имеет смысл задавать значение SRV1CV8_DATA в случае если его не удалось определить из строки запуска\n    # т.е. в списке значений будет пресутствовать пустая строка\n    # - для Linux, пустую строку можно заменить значением полученным в результате работы похжей команды\n    #   $(awk -v uid=\"^$(awk '/Uid/ {print $2}' /proc/\"$(pgrep ragent)\"/status 2>/dev/null)$\" -F: \\\n    #     '$3 ~ uid {print $6}' /etc/passwd)/.1cv8/1C/1cv8\"\n    #   ВАЖНО: однако следует учитывать имено pid процесса ragent-а у которого не указан каталог сервера!\n    # - для Windows, остуствие указанного каталога сервера возможно толькопри ручном запуске ragent\n}\n\n# Cписок информационных баз в виде json + файл кэша (идентификаторы: кластер, информационная база)\n# Список кластеров берется из файла кэша кластеров 1c_clusters_cache\n#  - если в первом параметре указано self, то выводится только список информационных баз текущего сервера\nfunction get_infobases_list {\n\n    cat /dev/null > \"${IB_CACHE}\"\n\n    readarray -t SERVERS_LIST < <( pop_clusters_list \"${1}\" )\n    BASE_INFO='{\"data\":[ '\n    MAX_THREADS=0\n    BASE_INFO+=\"$( execute_tasks get_clusters_infobases \"${SERVERS_LIST[@]}\" )\"\n    echo \"${BASE_INFO%, } ]}\" | sed 's/<sp>/ /g'\n}\n\n# Список информационных баз кластеров, указанного в ${1} сервера 1С, в формате json\n# В параметр ${1} передается строка вида:\n#   [<имя_сервера>:]<идентификатор_кластера>,<порт_rmngr>,<имя_кластера>;[<идентификатор_кластера>,<порт_rmngr>,<имя_кластера>;[...]]\n# где\n#  <имя_сервера> - необязательный параметр, указывает адрес сервера 1С (не указывается, если требуется получить список с текущего сервера)\n#  <идентификатор_кластера> - идентификатор (UUID) кластера\n#  <порт_rmngr> - порт на котором работает процесс rmngr данного кластера\n#  <имя_кластера> - имя кластера\n# комбинация <идентификатор_кластера>,<порт_rmngr>,<имя_кластера>; может встречаться в строке столько раз, \n#  сколько имеется кластеров на указанном (<имя_сервера>) сервере 1С Предприятия\nfunction get_clusters_infobases {\n    \n    RMNGR_HOST=${1%%#*}\n    CLUSTERS_LIST=${1#*#}\n\n    for CURRENT_CLUSTER in ${CLUSTERS_LIST//;/ }; do\n        readarray -t BASE_LIST < <( timeout -s HUP \"${RAS_TIMEOUT}\" rac infobase summary list \\\n            --cluster \"${CURRENT_CLUSTER%%,*}\" ${RAS_AUTH} \"${RMNGR_HOST}\" 2>/dev/null |\n            if [[ -z ${IS_WINDOWS} ]]; then cat; else iconv -f CP866 -t UTF-8; fi |\n            awk -v FS=' +: +' '/^(infobase|name|)(\\s|$)/ { if ( $2 ) { print $2 } else { print \"===\" } }' | \n                awk -v FS='\\n' -v RS='={3}\\n' -v OFS='|' '$1=$1' | sed 's/|$//' )\n        for CURRENT_BASE in \"${BASE_LIST[@]}\"; do\n            echo \"{ \\\"{#CLSTR_UUID}\\\":\\\"${CURRENT_CLUSTER%%,*}\\\",\\\"{#CLSTR_NAME}\\\":\\\"${CURRENT_CLUSTER##*,}\\\",\\\"{#IB_UUID}\\\":\\\"${CURRENT_BASE%%|*}\\\",\\\"{#IB_NAME}\\\":\\\"${CURRENT_BASE#*|}\\\" }, \"\n            echo \"${CURRENT_CLUSTER%%,*} ${CURRENT_BASE%%|*}\" >> \"${IB_CACHE}\"\n        done\n    done\n}\n\n# Список сеансов кластера, указанного в параметрах:\n#   - ${1} - имя сервера 1С\n#   - ${2} - UUID кластера\n#   - ${3} - необязательный, если принимает значение \"license\", то выводится информация\n#       только о сеансах, потребляющих клиентскую лицензию\nfunction get_sessions_list {\n\n    SERVER_NAME=${1}\n    CLUSTER_UUID=${2}\n\n    SESSION_FORMAT=\"session:session-id:infobase:user-name:app-id:hibernate:duration-current:data-separation\"\n    LICENSE_FORMAT=\"session:full-name:rmngr-address\"\n\n    timeout -s HUP \"${RAS_TIMEOUT}\" rac session list --cluster=\"${CLUSTER_UUID}\" \\\n        ${RAS_AUTH} \"${SERVER_NAME}\" 2>/dev/null | if [[ -z ${IS_WINDOWS} ]]; then cat; else iconv -f CP866 -t UTF-8; fi |\n        awk -v FS=' +: +' -v format=${SESSION_FORMAT} \\\n        'BEGIN { print \"FMT#\"format\"\\n\" } ( $0 ~ \"^(\"gensub(\":\",\"|\",\"g\",format)\"|)($| )\" ) { if ( $1 == \"app-id\" ) {\n            switch ($2) {\n                case \"WebClient\": print \"wc\"; break;\n                case /1CV8/: print \"cl\"; break;\n                case \"BackgroundJob\": print \"bg\"; break;\n                case \"WSConnection\": print \"ws\"; break;\n                case \"HTTPServiceConnection\": print \"hs\"; break; \n                default: print $2; }\n        } else { if ($1 == \"user-name\" && $2 == \"\" ) { print \"empty\" } else { print $2; } } }' |\n        awk -F':' -v RS='' -v OFS=':' '$1=$1' | ( if [[ ${3} != \"license\" ]]; then cat; else\n            awk -F':' -v OFS=\":\" -v format=\"${LICENSE_FORMAT#*:}\" 'FNR==NR{licenses[$1]=gensub(\"^[^:]+(:|$)\",\"\",\"g\",$0); next} \n                ($1 in licenses || $0 ~ \"^FMT#\") { if ( $0 ~ \"^FMT#\" ) { print $0,format } else { print $0,licenses[$1] } }' \\\n            <( timeout -s HUP \"${RAS_TIMEOUT}\" rac session list --licenses --cluster=\"${CLUSTER_UUID}\" \\\n                ${RAS_AUTH} \"${SERVER_NAME}\" 2>/dev/null |\n                awk -v FS=' +: +' -v format=\"${LICENSE_FORMAT}\" '( $0 ~ \"^(\"gensub(\":\",\"|\",\"g\",format)\"|)($| )\" ) { \n                    if ( $1 == \"full-name\" ) { value=gensub(\"[^\\\"].*/\", \"\", \"g\", $2) } else { value=$2 }; print value||(!$1)?value:\"n/a\" }' |\n                awk -v RS='' -v OFS=':' '$1=$1' ) - ; fi )\n\n}\n\nexport -f get_sessions_list\n"
  },
  {
    "path": "scripts/1c_license_files.sh",
    "content": "#!/bin/bash\n#\n# Мониторинг 1С Предприятия 8.3 (файлы программных лицензий)\n#\n# (c) 2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nWORK_DIR=$(dirname \"${0}\" | sed -r 's/\\\\/\\//g; s/^(.{1}):/\\/\\1/')\n\n# Включить опцию extglob если отключена (используется в 1c_common_module.sh)\nshopt -q extglob || shopt -s extglob\n\nsource \"${WORK_DIR}/1c_common_module.sh\" 2>/dev/null || { echo \"ОШИБКА: Не найден файл 1c_common_module.sh!\" ; exit 1; }\n\n# Проверяет соответствие оборудования на компьютере оборудованию, \n#  которое было зафиксировано в момент активации лицензии\n#  - в качестве превого параметра указывается путь до утилиты ring\n#  - в качестве второго параметра указывается имя лицензии\nfunction license_check {\n    [[ -z \"${1}\" ]] && error \"${ERROR_UNKNOWN_PARAM}\"\n\n    RESULT=$(\"${1}\" license validate --name \"${2}\" --send-statistics false 2>/dev/null) && echo \"Ok\" || echo \"${RESULT}\"\n}\n\n# Возвращает сводную информацию по файлам лицензий\n# ВАЖНО: Не использует для этих целей утилиту ring, поскольку:\n#  - утилита ring имеет длительный отклик и высокую нагрузку на ЦПУ при большом количестве файлов лицензий\n#  - утилита ring не выводит информацию о сроке действия лицензии для срочных лицензий (актуально для версии 0.15.0-2)\n# ВАЖНО: Анализируется информация, содержащаяся в файле лицензии, что было не всегда, поэтому в случае\n#  файла \"старого формата\" функция может возвращать \"пустой результат\"\nfunction get_licenses_info {\n    ( find /var/1C/licenses/ \"${ALLUSERSPROFILE}/Application\\ Data/1C/licenses\" \"${ALLUSERSPROFILE}/1C/licenses\" -maxdepth 1 -name \"*.lic\" \\\n        -exec awk '/^(Номер продукта|Product code|Срок действия|Valid till)/ {\n            str[FILENAME]=str[FILENAME]?str[FILENAME]\":\"gensub(\"^[^:]+[:] *\",\"\",\"g\",$0):FILENAME\":\"gensub(\"^[^:]+[:] *\",\"\",\"g\",$0)\n        } END { for (i in str) { print str[i] }}' {} \\; 2>/dev/null ) | sed -re 's/\\r//g' |\n    xargs -I license_file basename license_file | \n    sed -re 's/(0{7}10{3}1)5/\\10/;\n        s/(0{7}[10]0)10{3}/\\10500/;\n        s/:[0-9]{9}0*/:/;\n        s/^([^:]+[:][^:]*[:])([0-9]{2})[.]([0-9]{2})[.]([0-9]{4}).*/\\1\\4\\3\\2/' | \n    awk -F: -v OFS=':' '{ if ($2) { client+=$2 } else {server++ }; print $1,$2?$2:\"s\",gensub(\"^[^:]+:[^:]*:\",\"\",\"g\",$0)\n        } END { print \"summary\",server?server:0,client?client:0 }'\n}\n\n# Возвращает список файлов программных лицензий в формате json\n#  - в качестве первого параметра указывается путь до утилиты ring\nfunction get_license_list {\n    [[ -z ${1} ]] && error \"${ERROR_UNKNOWN_PARAM}\"\n    \n    \"${1}\" license list --send-statistics false 2>/dev/null | \n        sed -re '/^$/d; s/([0-9]+)[-]([0-9]+)[^\"]+\"([0-9]+[.]lic)\".*/\\1 \\2 \\3/' | \n        awk -F' ' -v ORS='' 'BEGIN { print \"{\\\"data\\\":[\" } \n            { print (NR!=1?\",\":\"\")\"{ \\\"{#NUMBER}\\\":\\\"\"$2\"\\\",\\\"{#PIN}\\\":\\\"\"$1\"\\\",\\\"{#FILE}\\\":\\\"\"$3\"\\\" }\" } \n        END { print \"]}\" }'\n}\n\ncase ${1} in\n    check) license_check \"$(check_ring_license)\" \"${2}\";;\n    info) get_licenses_info ;;\n    list) get_license_list \"$(check_ring_license)\" ;;\n    *) error \"${ERROR_UNKNOWN_MODE}\" ;;\nesac\n"
  },
  {
    "path": "scripts/1c_license_server.sh",
    "content": "#!/bin/bash\n#\n# Мониторинг 1С Предприятия 8.3 (сервер лицензирования)\n#\n# (c) 2019-2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nWORK_DIR=$(dirname \"${0}\" | sed -r 's/\\\\/\\//g; s/^(.{1}):/\\/\\1/')\n\n# Включить опцию extglob если отключена (используется в 1c_common_module.sh)\nshopt -q extglob || shopt -s extglob\n\nsource \"${WORK_DIR}/1c_common_module.sh\" 2>/dev/null || { echo \"ОШИБКА: Не найден файл 1c_common_module.sh!\" ; exit 1; }\n\nfunction get_license_counts {\n\n    CLSTR_LIST=${1##*#}\n\n    for CURR_CLSTR in ${CLSTR_LIST//;/ }; do\n        # Выводим первую строку (строка формата), после чего формируем список уникальных сеансов для испключения\n        #   повторного учета выданной лицензии в случае УО > 1 (см. #86)\n        ( { read -r ; echo \"$REPLY\" ; sort -u; } < <( get_sessions_list \"${1%#*}\" \"${CURR_CLSTR%%,*}\" license ) ) | \n        if [[ -s ${IB_CACHE} ]]; then\n            awk -F':' -v OFS=':' -v hostname=\"${HOSTNAME,,}\" -v cluster=\"CL#${CURR_CLSTR%%,*}\" \\\n                'FNR==NR{ if ($0 ~ \"^\"substr(cluster,4)) { split($0, ib_uuid, \" \"); sc[\"IB#\"ib_uuid[2]]=0 }; next}\n                BEGIN { sc[cluster]=0 } {\n                    print;\n                    if ( $0 ~ \"^FMT#\") { \n                        split($0,a,\"#|:\"); for (i in a) { f[a[i]]=i-1 } \n                    } else if ( length(f) > 0 ) {\n                        ib_mark=\"IB#\"$f[\"infobase\"];\n                        sc[cluster]++; sc[ib_mark]++; uc[cluster][$f[\"user-name\"]]; uc[ib_mark][$f[\"user-name\"]];\n                        if ( index(tolower($f[\"rmngr-address\"]), hostname) > 0 ) { hc[cluster]++; hc[ib_mark]++; }\n                        if ($f[\"app-id\"] == \"wc\") { wc[cluster]++; wc[ib_mark]++; }\n                        if ($f[\"rmngr-address\"] == \"n/a\") { cc[cluster]++; cc[ib_mark]++; }\n                    }\n                } END { \n                    for (i in sc) { \n                        print i,hc[i]?hc[i]:0,length(uc[i]),sc[i]?sc[i]:0,cc[i]?cc[i]:0,wc[i]?wc[i]:0 \n                    } \n                }' \"${IB_CACHE}\" -\n        else\n            awk -F':' -v OFS=':' -v hostname=\"${HOSTNAME,,}\" -v cluster=\"CL#${CURR_CLSTR%%,*}\" \\\n                'BEGIN { sc[cluster]=0 } {\n                    print;\n                    if ( $0 ~ \"^FMT#\") { \n                        split($0,a,\"#|:\"); for (i in a) { f[a[i]]=i-1 } \n                    } else if ( length(f) > 0 ) {\n                        sc[cluster]++; uc[cluster][$f[\"user-name\"]];\n                        if ( index(tolower($f[\"rmngr-address\"]), hostname) > 0 ) { hc[cluster]++ }\n                        if ($f[\"app-id\"] == \"wc\") { wc[cluster]++ }\n                        if ($f[\"rmngr-address\"] == \"n/a\") { cc[cluster]++ }\n                    }\n                } END { \n                    for (i in sc) { \n                        print i,hc[i]?hc[i]:0,length(uc[i]),sc[i]?sc[i]:0,cc[i]?cc[i]:0,wc[i]?wc[i]:0 \n                    } \n                }'\n        fi\n    done\n\n}\n\nfunction used_license {\n\n    export MAX_THREADS=0 # Отключаем ограничение по количеству параллельно выполняемых задач\n    check_clusters_cache\n    readarray LIC_LIST < <( find /var/1C/licenses \"${ALLUSERSPROFILE}/Application\\ Data/1C/licenses\" \"${ALLUSERSPROFILE}/1C/licenses\" \\\n        -maxdepth 1 -name \"*.lic\" -exec basename {} \\; 2>/dev/null )\n\n    ( execute_tasks get_license_counts $( pop_clusters_list ) ) | \\\n        awk -F: -v OFS=':' -v hostname=\"${HOSTNAME,,}\" -v lic_list=\"${LIC_LIST[*]}\" '{\n            switch ($0) {\n                case /^FMT#/: split($0,a,\"#|:\"); for (i in a) { f[a[i]]=i-1 }; break\n                case /^(IB|CL)#/: print; break\n                default:\n                    sc++; uc[$f[\"user-name\"]]; \n                    if ( index(tolower($f[\"rmngr-address\"]), hostname) > 0 ) { \n                        hc++;\n                        lic[gensub(\"\\\"\",\"\",\"g\",$f[\"full-name\"])]++;\n                    }\n                    if ($f[\"app-id\"] == \"wc\") { wc++ }\n                    if ($f[\"rmngr-address\"] == \"n/a\") { cc++ }\n            }\n        } END {\n            split(lic_list, lic_files, \" \");\n            for ( i in lic_files ) {\n                print \"LIC#\"lic_files[i],lic[lic_files[i]]?lic[lic_files[i]]:0\n            }\n            print \"summary\",hc?hc:0,length(uc),sc?sc:0,cc?cc:0,wc?wc:0\n        }'\n\n}\n\n# Проверяет наличие процессов сервера 1С для кластера по указанным параметрам:\n#  - ${1} - должен принимать заничение rmngr или rphost\n#  - ${2} - UUID кластера, к которому подключен сервер лицензирования\nfunction check_cluster_process {\n\n    RAC_PARAM=$(echo \"${1}\" | sed 's/rmngr/manager/; s/rphost/process/')\n    PROCESS_UUID=$(timeout -s HUP \"${RAS_TIMEOUT}\" rac \"${RAC_PARAM}\" list  --cluster \"${2}\"  ${RAS_AUTH} \\\n        \"$( awk -F# -v cluster=\"${2}\" '$0 ~ cluster { print $1 }' \"${CLSTR_CACHE}_\"?(${RAS_PORTS//,/|}) )\" 2>/dev/null | \n        awk -v FS=\" +: *\" -v filter=\"${RAC_PARAM}\" '( $0 ~ \"^(\"filter\"|host|)( |$)\" ) { print $2}' | \n        awk -v RS='' -v OFS=':' '$1=$1' | awk -F\":\" -v hostname=\"${HOSTNAME,,}\" '( tolower($0) ~ \":\"hostname ) { print $1 }')\n    if [[ -z ${PROCESS_UUID} ]]; then\n        echo 0\n    else\n        if [[ -z ${IS_WINDOWS} ]]; then\n            pgrep \"${1}\" -a\n        else \n            wmic path win32_process where \"caption like '${1}.exe'\" get commandline /format:csv\n        fi | awk \"/${PROCESS_UUID//$'\\n'/|}|${2}/ { count++ } END { print count?count:0 }\"\n    fi\n\n}\n\ncase ${1} in\n    process) CLSTR_UUID=${2}; CHECK_MODE=${3} ; shift 2 ;;&\n    used|infobases|clusters|process) shift; make_ras_params \"${@}\" ;;&\n    used) used_license ;;\n    infobases) get_infobases_list;;\n    clusters) get_clusters_list ;;\n    process) check_cluster_process \"${CHECK_MODE}\" \"${CLSTR_UUID}\" ;;\n    *) error \"${ERROR_UNKNOWN_MODE}\" ;;\nesac\n"
  },
  {
    "path": "scripts/1c_work_server.sh",
    "content": "#!/bin/bash\n#\n# Мониторинг 1С Предприятия 8.3 (рабочий сервер)\n#\n# (c) 2019-2023, Алексей Ю. Федотов\n#\n# Email: fedotov@kaminsoft.ru\n#\n\nWORK_DIR=$(dirname \"${0}\" | sed -r 's/\\\\/\\//g; s/^(.{1}):/\\/\\1/')\n\n# Включить опцию extglob если отключена (используется в 1c_common_module.sh)\nshopt -q extglob || shopt -s extglob\n\nsource \"${WORK_DIR}/1c_common_module.sh\" 2>/dev/null || { echo \"ОШИБКА: Не найден файл 1c_common_module.sh!\" ; exit 1; }\n\n# Коды завершения процедуры архивирования файлов технологического журнала\nexport DUMP_CODE_0=0   # Архивированение файлов ТЖ выполнено успешно\nexport DUMP_CODE_1=1   # Файл архива ТЖ уже существует\nexport DUMP_CODE_2=2   # При архивировании файлов ТЖ возникли ошибки\nexport DUMP_CODE_3=3   # Не удалось выполнить архивирование ТЖ на удаленом сервере\n\nfunction check_log_dir {\n    [[ ! -d \"${1}/zabbix/${2}\" ]] && error \"Неверно задан каталог технологического журнала!\"\n}\n\nfunction get_calls_info {\n\n    MODE=${1}\n\n    [[ -n ${2} ]] && TOP_LIMIT=${2} || TOP_LIMIT=25\n\n    case ${MODE} in\n        count) echo \"Кол-во | Длит-ть,с | СрДл-ть,мс | Контекст\";;\n        cpu) echo \"Процессор,с (%) | Длит-ть,с | Кол-во | СрДл-ть,мс | Контекст\";;\n        duration) echo \"Длительность,с (%) | Кол-во | СрДл-ть,мс | Процессор | Контекст\";;\n        lazy) echo \"Длит-ть,с | Кол-во | СрДл-ть,мс | Процессор | Контекст\";;\n        dur_avg) echo \"СрДл-ть,с | Длит-ть,с | Кол-во | Процессор | Контекст\";;\n        memory) echo \"Память,МБ | СрДл-ть,мс | СрПр-ор,мс | Кол-во | Контекст\";;\n        iobytes) echo \"Объем IO,МБ | Длит-ть,с | Процессор | Кол-во | Контекст\";;\n        *) error \"${ERROR_UNKNOWN_PARAM}\" ;;\n    esac\n\n    put_brack_line\n\n    cat \"${LOG_DIR}\"/rphost_*/\"${LOG_FILE}.log\" 2>/dev/null | awk \"/CALL,.*(Context|Module)/\" | \\\n\tsed -re 's/,Module=(.*),Method=/,Context=ОбщийМодуль.ФоновыйВызов : ОбщийМодуль.\\1.Модуль./' | \\\n        sed -re \"s/[0-9]+:[0-9]+.[0-9]+-//; s/,Method=[^,]+//; s/,[a-zA-Z:]+=/,/g\" | \\\n        awk -F, -v mode=\"${MODE}\" '{ if ($4) {count[$4\"->\"$5]+=1; durations[$4\"->\"$5]+=$1; \\\n            cpus[$4\"->\"$5]+=$9; iobytes[$4\"->\"$5]+=$7+$8; duration[$4]+=$1; cpu[$4]+=$9; \\\n            if ( mempeak[$4\"->\"$5] < $6 ) { mempeak[$4\"->\"$5]=$6; } } } \\\n        END { for ( i in count ) { \\\n            if ( mode == \"count\" ) { printf \"%6d | %9.2f | %10.2f | %s\\n\", count[i], \\\n                durations[i]/1000000, durations[i]/count[i]/1000, i } \\\n            else if ( mode == \"cpu\" ) { printf \"%8.2f (%4.1f) | %9.2f | %6d | %10.2f | %s\\n\", \\\n                cpus[i]/1000000, cpus[i]/cpu[substr(i,0,index(i,\"->\")-1)]*100, durations[i]/1000000, count[i], durations[i]/count[i]/1000, i }  \\\n            else if ( mode == \"lazy\" ) { printf \"%f@%9.2f | %6d | %10.2f | %9.2f | %s\\n\", \\\n                durations[i]/cpus[i], durations[i]/1000000, count[i], durations[i]/count[i]/1000, cpus[i]/1000000, i }  \\\n            else if ( mode == \"dur_avg\" ) { printf \"%9.2f | %9.2f | %6d | %9.2f | %s\\n\", \\\n                durations[i]/count[i]/1000000, durations[i]/1000000, count[i], cpus[i]/1000000, i }  \\\n            else if ( mode == \"duration\" ) { printf \"%11.2f (%4.1f) | %6d | %10.2f | %9.2f | %s\\n\", \\\n                durations[i]/1000000, durations[i]/duration[substr(i,0,index(i, \"->\")-1)]*100, count[i], durations[i]/count[i]/1000, cpus[i]/1000000, i } \\\n            else if ( mode == \"memory\" ) { printf \"%9.2f | %10.2f | %10.2f | %6d | %s\\n\", \\\n                mempeak[i]/1024/1024, durations[i]/count[i]/1000, cpus[i]/count[i]/1000, count[i], i } \\\n            else if ( mode == \"iobytes\" ) { printf \"%11.2f | %9.2f | %9.2f | %6d | %s\\n\", \\\n                iobytes[i]/1024/1024, durations[i]/1000000, cpus[i]/1000000, count[i], i } \\\n            } }' | \\\n        sort -rn | head -n \"${TOP_LIMIT}\" | awk -v mode=\"${MODE}\" -F\"@\" '{ if ( mode == \"lazy\" ) { print $2 } else { print $0 } }'\n}\n\n\nfunction get_locks_info {\n\n    STORE_PERIOD=30 # Срок хранения архивов ТЖ, содержащих информацию о проблемах - 30 дней\n\n    WAIT_LIMIT=${1}\n\n    function save_logs {\n        if [[ $(echo \"${1}\" | grep -ic \"${HOSTNAME}\") -ne 0 ]]; then\n            DUMP_RESULT=$(dump_logs \"${LOG_DIR}\" \"${LOG_FILE}\")\n        else\n            DUMP_RESULT=$(zabbix_get -s \"${1}\" -k 1c.ws.dump_logs[\"${LOG_DIR}\",\"${LOG_FILE}\"] 2>/dev/null)\n            [[ -z ${DUMP_RESULT} || ${DUMP_RESULT} -eq ${DUMP_CODE_2} ]] && DUMP_RESULT=${DUMP_CODE_3}\n        fi\n\n        [[ ${DUMP_RESULT} -gt 1 ]] && DUMP_TEXT=\"ОШИБКА: не удалось сохранить файлы технологического журнала!\" ||\n            DUMP_TEXT=\"Файлы технологического журнала сохранены (${LOG_DIR%/*}/problem_log/${LOG_DIR##*/}-${LOG_FILE}.tgz)\"\n\n        [[ -n ${DUMP_RESULT} ]] && echo \"[${1} (${DUMP_RESULT})] ${DUMP_TEXT}\" && unset DUMP_RESULT\n    }\n\n    echo \"lock: $(cat \"${LOG_DIR}\"/rphost_*/\"${LOG_FILE}.log\" 2>/dev/null | grep -c ',TLOCK,')\"\n\n    readarray -t RESULT < <(cat \"${LOG_DIR}\"/rphost_*/\"${LOG_FILE}.log\" 2>/dev/null |\n        awk \"/(TDEADLOCK|TTIMEOUT|TLOCK.*,WaitConnections=[0-9]+)/\" |\n        sed -re \"s/[0-9]{2}:[0-9]{2}.[0-9]{6}-//; s/,[a-zA-Z\\:]+=/,/g\" |\n        awk -F\",\" -v lts=\"${WAIT_LIMIT}\" 'BEGIN {dl=0; to=0; lw=0} { if ($2 == \"TDEADLOCK\") {dl+=1}\n            else if ($2 == \"TTIMEOUT\") { to+=1 }\n            else { lw+=$1; lws[$4\"->\"$6]+=$1; } }\n            END { print \"timeout: \"to\"<nl>\"; print \"deadlock: \"dl\"<nl>\"; print \"wait: \"lw/1000000\"<nl>\";\n            if ( lw > 0 ) { print \"Ожидания на блокировках (установлен порог \"lts\" сек):<nl>\";\n            for ( i in lws ) { print \"> \"i\" - \"lws[i]/1000000\" сек.<nl>\" } } }')\n\n    echo \"${RESULT[@]}\" | perl -pe 's/<nl>\\s?/\\n/g'\n\n    if [[ \"${RESULT[1]%<*}\" != 0 || \"${RESULT[3]%<*}\" != 0 ||\n        $( awk -v value=\"${RESULT[5]%<*}\" -v limit=\"${WAIT_LIMIT}\" 'BEGIN { print ( value > limit ) }' ) == 1 ]]; then\n\n        shift; make_ras_params \"${@}\"\n\n        check_clusters_cache\n\n        for CURRENT_HOST in $( pop_clusters_list ); do\n            CLSTR_LIST=${CURRENT_HOST#*#}\n            for CURR_CLSTR in ${CLSTR_LIST//;/ }; do\n                SRV_LIST+=( $(timeout -s HUP \"${RAS_TIMEOUT}\" rac server list --cluster=\"${CURR_CLSTR%,*}\" \\\n                    ${RAS_AUTH} \"${CURRENT_HOST%#*}\" 2>/dev/null| grep agent-host | sort -u | \\\n                    sed -r \"s/.*: (.*)$/\\1/; s/\\\"//g\") )\n            done\n        done\n\n    fi\n\n    export -f dump_logs\n    execute_tasks save_logs $(echo \"${SRV_LIST[@]}\" | perl -pe 's/ /\\n/g' | sort -u)\n\n    find \"${LOG_DIR%/*}/problem_log/\" -mtime +${STORE_PERIOD} -name \"*.tgz\" -delete 2>/dev/null\n}\n\nfunction get_excps_info {\n\n    for PROCESS in \"${PROCESS_NAMES[@]}\"; do\n        EXCP_COUNT=$(cat \"${LOG_DIR}\"/\"${PROCESS}\"_*/\"${LOG_FILE}.log\" 2>/dev/null | grep -c \",EXCP,\")\n        echo \"${PROCESS}: $([[ -n ${EXCP_COUNT} ]] && echo \"${EXCP_COUNT}\" || echo 0)\"\n    done\n}\n\nfunction get_memory_counts {\n\n    RPHOST_PID_HASH=\"${TMPDIR}/1c_rphost_pid_hash\"\n    PROC_REGEX=\"$(echo \"${PROCESS_NAMES[*]}\" | sed 's/ /|/g')\"\n\n    if [[ -z \"${IS_WINDOWS}\" ]]; then\n        PROC_PIDS=\"$( pgrep -d, \"${PROC_REGEX}\" )\"\n        ps -hwwp \"${PROC_PIDS:-1}\" -o comm,pid,rss,cmd -k pid |\n            sed -re 's/^([^ ]+) +([0-9]+) +([0-9]+) +/\\1,\\2,\\3,/'\n    else\n        wmic path win32_process where \"caption like 'ragent%' or caption like 'rmngr%' or caption like 'rphost%'\" \\\n            get caption,processid,workingsetsize,commandline /format:csv 2>/dev/null |\n            sed -re 's/^[^,]+,([^,]+),([^,]+),([^,]+),(.*)/\\1,\\3,\\4,\\2/'\n    fi | awk -F, -v proc_regex=\"${PROC_REGEX}\" -v mem_in_kb=\"${IS_WINDOWS:-1024}\" -v pid_hash=\"$( cat \"${RPHOST_PID_HASH}\" 2>/dev/null )\" \\\n        'BEGIN { split(proc_regex, proc_names, \"|\"); proc_regex+=\"[^,]*,[0-9]+,[0-9]+\" } \n        $0 ~ proc_regex {\n            proc_name=gensub(/[.].+/,\"\",\"g\",$1)\n            proc_pids[proc_name][$2]\n            proc[proc_name,\"memory\"]+=$3 \n            } END {\n                for ( i in proc_names ) { \n                    proc_flag=\"\"; pid_list=\"\"; proc_name=proc_names[i]\n                    switch (proc_name) {\n                        case \"ragent\":\n                            if ($4 ~ /(\\/|-)debug(\\s|$)/ ) proc_flag=1; else proc_flag=0\n                            break\n                        case \"rphost\":\n                            if ( length(proc_pids[proc_name]) > 0 ) {\n                                for (j in proc_pids[proc_name]) pid_list=pid_list?pid_list\",\"j:j\n                            }\n                            hash_command=\"echo \"pid_list\" | md5sum | sed \\\"s/ .*//\\\"\"\n                            (hash_command | getline new_hash) > 0\n                            close(hash_command)\n                            if ( pid_hash == new_hash ) { proc_flag=0 } else { proc_flag=1 }\n                            print new_hash > \"'\"${RPHOST_PID_HASH}\"'\"\n                            break\n                    }\n                    print proc_name\":\",length(proc_pids[proc_name]),proc[proc_name,\"memory\"]*mem_in_kb,proc_flag\n                }\n            }'\n\n}\n\n# Архивирование файлов ТЖ с именем ${2} из каталога ${1} в problem_log\nfunction dump_logs {\n    # TODO: Проверка наличия каталога problem_log и возможности записи в него\n\n    if [[ -f ${1%/*}/problem_log/${1##*/}-${2}.tgz ]]; then\n        DUMP_RESULT=${DUMP_CODE_1}\n    else\n        cd \"${1}\" 2>/dev/null && tar czf \"../problem_log/${1##*/}-${2}.tgz\" ./rphost_*/\"${2}\".log && \\\n        DUMP_RESULT=${DUMP_CODE_0} || DUMP_RESULT=${DUMP_CODE_2}\n    fi\n\n    echo \"${DUMP_RESULT}\"\n\n}\n\nfunction get_physical_memory {\n    if [[ -z ${IS_WINDOWS} ]]; then\n        free -b | grep -m1 \"^[^ ]\" | awk '{ print $2 }'\n    else\n        wmic computersystem get totalphysicalmemory /format:csv | awk -F, '/[0-9]+/ {print $2}'\n    fi\n}\n\nfunction get_available_perfomance {\n\n    check_clusters_cache\n\n    ( execute_tasks get_processes_perfomance $( pop_clusters_list ) ) | grep -i \"${HOSTNAME}\" |\n        awk -F: '{ apc+=1; aps+=$2 } END { if ( apc > 0) { print aps/apc } else { print \"0\" } }'\n\n}\n\ncase ${1} in\n    calls | locks | excps) check_log_dir \"${2}\" \"${1}\";\n        export LOG_FILE=$(date --date=\"last hour\" \"+%y%m%d%H\");\n        export LOG_DIR=\"${2%/}/zabbix/${1}\" ;;&\n    excps|memory) PROCESS_NAMES=(ragent rmngr rphost) ;;&\n    calls) shift 2; get_calls_info \"${@}\" ;;\n    locks) shift 2; get_locks_info \"${@}\" ;;\n    excps) shift 2; get_excps_info \"${@}\" ;;\n    memory) get_memory_counts ;;\n    ram) get_physical_memory ;;\n    dump_logs) shift; dump_logs \"${@}\" ;;\n    perfomance) shift; make_ras_params \"${@}\"; get_available_perfomance ;;\n    *) error \"${ERROR_UNKNOWN_MODE}\" ;;\nesac\n\n"
  }
]