habrosocietyへのご挨拶! 黄色のプログラムの使用は、ロシアで非常に人気があります。 残念ながら、作業の安定性には多くの課題が残されています。 多くのシステム管理者(1C管理者/プログラマーでもある)は、毎日の処理の監視と1Cアンロードの継続的な作業の問題を非常に簡単に解決します-彼らは電子メールアラートを設定します。 何か悪いことが起こった場合-メールが送信されると、管理者はサーバーに行き、エラー、修正、利益を確認します。 しかし、これは
怠け者の管理者にとっては選択肢ではありません!
1Cを監視するためのインターネットには、1Cサービスを監視するためのテンプレートのみがあります。 監視ゾーンを拡大してみましょう。
この記事では、次の問題を解決する方法を説明します。
- 修正不能なエラー(ロック、プラットフォームエラーなど)でクラッシュする1Cが常に動作しており、簡単な再起動で解決されます。 たとえば、オンラインでの荷降ろし(この場合、はかり/現金機器への荷降ろしです)
- N分/時間ごとに定期的に実行される1Cがあります(さまざまな理由で機能しない場合があります)。 たとえば、取引所やその他の日常業務
大規模な組織では、1C監視の問題は1Cプログラマー/管理者によって対処されます。 システム管理者(このような別のポジションがあるが、私たちが持っている場合)は、彼のハードウェア/プログラムのみを監視し、1Cはそれを本当に好きではありません。 私たちはこの障壁を克服しました。私たちもあなたのためにそれを克服することを提案します:)
組織について
大規模な小売ネットワークでは、STU 1Cを品質として使用しています。 多くのオブジェクト、どこでも中央ベースとの交換が必要です。 1C(レジと重量との交換)を常に実行しているオブジェクトのサーバー上で回転しています。
追加条件:
- Zabbix監視サーバー。
- タスクを実行するサーバー上のタスクスケジューラ。 「 交換 」があります。
- HTTPを介したzabbix_sender 通常のzabbix_sender.exeを呼び出すこともできます
- 1、そこからhttp-request(この場合はhttps)を送信するか、必要なパラメーターを指定してzabbix_senderを実行できます
ソリューションのアーキテクチャ
一般的な作業スキームを示した後、各部分を分析します。
ザビックス
模様<?xml version="1.0" encoding="UTF-8"?> <zabbix_export> <version>2.0</version> <date>2015-06-05T11:21:26Z</date> <groups> <group> <name>My Templates</name> </group> </groups> <templates> <template> <template>1C Habr template</template> <name>1C Habr template</name> <groups> <group> <name>My Templates</name> </group> </groups> <applications> <application> <name>1 </name> </application> </applications> <items> <item> <name>1 </name> <type>2</type> <snmp_community/> <multiplier>0</multiplier> <snmp_oid/> <key>exchange.status</key> <delay>0</delay> <history>90</history> <trends>365</trends> <status>0</status> <value_type>3</value_type> <allowed_hosts/> <units/> <delta>0</delta> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <formula>1</formula> <delay_flex/> <params/> <ipmi_sensor/> <data_type>0</data_type> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications> <application> <name>1 </name> </application> </applications> <valuemap> <name>1Ok / 0Fail</name> </valuemap> </item> <item> <name> 1 </name> <type>2</type> <snmp_community/> <multiplier>0</multiplier> <snmp_oid/> <key>exchange.restart</key> <delay>0</delay> <history>90</history> <trends>365</trends> <status>0</status> <value_type>3</value_type> <allowed_hosts/> <units/> <delta>0</delta> <snmpv3_contextname/> <snmpv3_securityname/> <snmpv3_securitylevel>0</snmpv3_securitylevel> <snmpv3_authprotocol>0</snmpv3_authprotocol> <snmpv3_authpassphrase/> <snmpv3_privprotocol>0</snmpv3_privprotocol> <snmpv3_privpassphrase/> <formula>1</formula> <delay_flex/> <params/> <ipmi_sensor/> <data_type>0</data_type> <authtype>0</authtype> <username/> <password/> <publickey/> <privatekey/> <port/> <description/> <inventory_link>0</inventory_link> <applications> <application> <name>1 </name> </application> </applications> <valuemap> <name>1C Restart</name> </valuemap> </item> </items> <discovery_rules/> <macros/> <templates/> <screens/> </template> </templates> <triggers> <trigger> <expression>{1C Habr template:exchange.status.nodata(30m)}=1&{1C Habr template:exchange.status.time()}>084500&{1C Habr template:exchange.status.time()}<200000</expression> <name>{HOST.NAME} 1C 30 </name> <url/> <status>0</status> <priority>1</priority> <description/> <type>0</type> <dependencies/> </trigger> <trigger> <expression>{1C Habr template:exchange.restart.count(1h,100)}>2</expression> <name>{HOST.NAME} 1C 3 1 </name> <url/> <status>0</status> <priority>1</priority> <description/> <type>0</type> <dependencies/> </trigger> <trigger> <expression>{1C Habr template:exchange.restart.last(0)}=2</expression> <name>{HOST.NAME} 1C !</name> <url/> <status>0</status> <priority>2</priority> <description/> <type>0</type> <dependencies/> </trigger> </triggers> </zabbix_export>
テンプレートには2つの項目があります。
- 1C Exchangeステータス(exchange.status) -ここで、1Cは何が機能するかに関するデータを送信します。 トリガー:
- {HOST.NAME} 1C 30分以上交換がありませんでした-1Cの再起動アクションをトリガーするトリガーです。 時間の制限があるため、トリガー式のこの部分を自分用にカスタマイズします
&{1C Habrテンプレート:exchange.status.time()}> 084500&{1C Habrテンプレート:exchange.status.time()} <200000
- センターで1C Exchangeを再起動します(exchange.restart) -スクリプトのみがここに値を送信します
- {HOST.NAME} 1CはセンターエラーでExchangeを再起動します! -トリガーは動作しますが、スクリプトは正しく動作しませんでした(1Cの終わりに必要なタスクやその他のエラーはありません)
- {HOST.NAME} 1Cは、1時間で3回以上、センターでExchangeを再起動します-再起動の回数を決定する必要があります。再起動の頻度が高すぎると、システムの動作が正しくないことを示します。
アクション
アクションを作成します(zabbixがすべての設定をエクスポートするとき...):
ご覧のとおり、トリガーが消えない場合、トリガーは3回(トリガーの直後、30分後と40分後)発生します。 確かに。
コマンド実行を有効にする
各サーバーで、
zabbix_agentd.confに行を追加します
EnableRemoteCommands = 1
1C
1Cは
HTTP経由でzabbix_senderを使用してデータをZabbixに送信
します 。 zabbix_sender.exeを使用して実行できます。 8.1では、いくつかのGETパラメータを使用したhttpリクエストに問題があるため、ここに作業コードを示します。 8.2では、すべてが良いと言われています。標準的な方法を使用できます。
1Cを常時実行する場合、要求は定期的な起動でN分ごとに1回送信する必要があります-完了時に(長続きしない場合)。 1Cは、Zabbixに動作することと触れないことを伝えます。 レポートが停止するとすぐに、すべてのプロセスを強制終了し、新しいプロセスを開始します。
コード1C 8.1 (, ) = (()); = "http://zabbix.example.com/zabbix_sender/index.php?server=" + + "&key=" + + "&value=" + ; WinHttp = COM("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"Windows-1251"); WinHttp.Open("GET", , 0); WinHttp.SetRequestHeader("Accept-Language", "ru"); WinHttp.SetRequestHeader("Accept-Charset","Windows-1251"); WinHttp.setRequestHeader("Content-Language", "ru"); WinHttp.setRequestHeader("Content-Charset", "Windows-1251"); WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251"); WinHttp.Send(); = WinHttp.ResponseText(); ; ; = "OK" ; ; ;
窓
次の内容のファイル
C:\ ZBX \ restart-1c.ps1を作成します。
restart-1c.ps1 param([string]$programm_name="nul") Try{ $servername=$env:computername $zabbixhost="zabbix.example.com" $zabbix_key=$programm_name+".restart" switch ($programm_name) { "exchange" { $window_name="1: - : " $schedule_name="" } default { throw "No param" } }
そして、タスクをサーバーにインポートします。 PowerShellスクリプトを起動します(残念ながら、長さが255文字のコマンドはzabbix_actionで制限されているため、すぐにスクリプトを渡すことはできません)。
プランナー <?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Author>example/username</Author> </RegistrationInfo> <Triggers /> <Principals> <Principal id="Author"> <UserId>Server\username</UserId> <LogonType>InteractiveToken</LogonType> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <Duration>PT10M</Duration> <WaitTimeout>PT1H</WaitTimeout> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>P3D</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>powershell.exe</Command> <Arguments>-windowstyle hidden -nologo -NonInteractive -File "C:\ZBX\restart-1c.ps1" exchange</Arguments> </Exec> </Actions> </Task>
前提条件 -スケジューラーのタスクは、1Cが実行されるユーザーの下で作成する必要があります。 システムにログインしている専用ユーザーがいます。
言い訳
そのようなメカニズムに頼らなければなりませんでした(
Stop-Process 1cv8.exeだけを行うことは不可能
でした )。 サーバーは多くの実行中の1Cを実行しますが、これは機能するため、必要なしにそのように再起動するだけではいけません。
すべてを正しく行った(そして、私が正しく説明した)場合、突然(すべてのタスクと.exeの完了とともに)作業を停止すると、プログラムが再起動します。
おそらく何か質問があります(技術的な解決策を説明してください-私の趣味ではありません)-私は答えて、個人的に書きます。 また、各レジと各残高で交換を制御するメカニズムを実装しました(1つのボタンで
低レベル検出と1C構成の非動的更新を使用すると、誰かに役立つかもしれません。これに関する記事を書きます)。
建設的な批判、アドバイスは大歓迎です:)
私の自尊心:解決策がいつ誰かを助けるかを知りたいので、それが難しくなく、あなたが一部または完全な解決策を使用する場合、調査のボタンをクリックしてください、ありがとう!