wiki:misc/botlog_pas

Version 2 (modified by michkawa, 12 months ago) (diff)

--

電子ログシステム & 画像ログシステム

現在、記述中なので、プログラムの配布は後日行う予定

KEKBで使用されているZlogの代替として、電子ログシステム(botlog)と画像ログシステム(PrintAnyServer)を開発した。

パッケージインストール

このシステムのインストールやその運用は、サーバーシステム管理者でroot権限を持っていることが前提のシステムなので注意。

インストール環境

インストールするシステムは、

  • Intel_x86_64
  • CentOS 6.x(なるべく最新)
  • apache 2.2.x(CentOS 6.x標準)

のみを前提としている。
これはパッケージ中に、コンパイル済の python2.7、epics_base とapache用 mod_wsgi.so が入っているためなので、 もし別のOSにインストールする場合には、これらを別途コンパイルするか、OSのpackageとpythonのpackageを自力でインストールする必要がある。

また、apache関連の設定も上書きするので、既存のサーバーにインストールする際には、一旦別ディレクトリに展開するなどの注意が必要。
なるべくなら新規のサーバーか仮想マシン上に展開するほうがいい。

このシステムは、Web画面表示用javascriptのほとんどをCDN(Content Delivery Network)経由で取得しているので、外部ネットワークから完全に隔離されたネットワークでは動作しない。
必ず、グローバルネットワークへ接続可能なネットワークで使用すること。
この問題はいつかは解決する予定なので、もう少し時間を頂きたい。

パッケージ展開

電子ログシステム関連のプログラムのほとんどは、/opt/OperationLogに置くようにしてある。
追加/上書きされるディレクトリ一覧は、次のようになっている。

/opt/OperationLog/botlog             botlog本体
                 /PrintAnyServer     PrintAnyServer本体
                 /data               データ保存ディレクトリ
                      /botlog          botlog用DB
                      /pas             画像保存用
                 /epics              EPICS base R.14.12.7
                 /etc                環境設定用
                 /local              環境用プログラム(python2.7等)
                 /log                ログ保存ディレクトリ

/var/www/html                        初期サイトディレクトリ
             /printView                PrintAnyServer用ディレクトリ(/opt/OperationLog/PrintAnyServer/Printviewへのシンボリック)
/etc/httpd/conf/httpd.conf           apache 2.2用設定ファイル
          /conf.d/botlog.conf          botlog用設定ファイル
          /conf.d/pas.conf             PrintAnyServer用設定ファイル

/etc/ld.so.conf.d/OperationLog.conf  /opt/OperationLog/local/libを登録

/usr/lib64/httpd/modules/mod_wsgi.so /opt/OperationLog/local以下のpython2.7を使用するようにコンパイル済

そのまま上書きする場合には、rootで実行する必要がある。

[root@localhost ~]# tar zxf botlog_pas_xxxxxx.tar.gz -C /

展開後、ライブラリパスを設定し、/opt/OperationLog/libを使用可能にする。

[root@localhost ~]# ldconfig

また、httpd(apache)のサービスを起動していない場合には、設定ファイルのチェック後にサービスを起動する。

[root@localhost ~]# apachtctl -t
Syntax OK
[root@localhost ~]# service httpd status
httpd is stopped
[root@localhost ~]# service httpd start
Starting httpd:                                            [  OK  ]
[root@localhost ~]# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

管理ユーザー設定

電子ログの管理ユーザーを設定する。
rootで問題なければそのままでも構わないが、管理用のユーザーを作ったほうが安全だと思われる。

展開した/opt/OperationLog以下のディレクトリは、所有者がuid:501,gid:502になっているので、ファイルは適切な所有者に変更すること。

PrintAnyServerの起動

PrintAnyServerの本体は、httpdとは別のプロセスとして動作しているので、事前に起動させておく必要がある。
起動用のスクリプトを作成してあるが、まずはコマンドラインから起動して動作確認をする。
PrintAnyServerは、内部でuid,gid等を変更する機能があるので、rootで実行すること。

[root@localhost ~]# cd /opt/OperationLog/PrintAnyServer
[root@localhost PrintAnyServer]# source /opt/OperationLog/etc/env.sh
[root@localhost PrintAnyServer]# python2.7 printAnyServer.py conf/test.cfg
Bottle v0.12.13 server starting up (using PasteServer())...
Listening on http://0.0.0.0:9090/
Hit Ctrl-C to quit.

serving on 0.0.0.0:9090 view at http://127.0.0.1:9090

正常に起動できれば、以上のようなメッセージが表示される。

動作確認

同一ネットワーク上のPCでWebブラウザを立ち上げて、それぞれhttp://(HOSTNAMEorIPADDR)/TEST/botlog/edithttp://(HOSTNAMEorIPADDR)/printViewにアクセスすると画面が表示されるはずである。

No image "2018_08_17_18_08_56.png" attached to misc/botlog_pasNo image "2018_08_17_18_09_17.png" attached to misc/botlog_pas

設定

この状態でも一般的な使用は可能なので、そのまま使っても問題はないが、最低でもhttp://(HOSTNAMEorIPADDR)/TEST/botlog/***/TESTは変更したほうがいいだろう。

botlog,PrintAnyServer共に設定を変更した際には、必ずhttpdを再起動する必要がある。

[root@installtest2 ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

botlog

サイト名変更

接続先URLが、/TEST/botlog/***となっているので、これを変更する。

修正するファイルは、/opt/OperationLog/botlog/modules/botlogConfig.py。このファイルは、/opt/OperationLog/botlog/botlogConfig_default.pyのシンボリックなので、一旦シンボリックを削除して、botlogConfig_default.pyをコピーしてから修正する。

今回は"EUJP"とする。

ここからは、管理ユーザーで行う。

[user@localhost ~]$ cd /opt/OperationLog/botlog/
[user@localhost botlog]$ rm modules/botlogConfig.py
[user@localhost botlog]$ cp botlogConfig_default.py modules/botlogConfig.py

[user@localhost botlog]$ vi modules/botlogConfig.py
     :
    # 正式版(or 外部プログラム)用サーバー設定
    def getServerCfg(self):
        # type: [ httpd | standalone ]
        #        standalone: 単体動作用デバッグサーバ
        #        httpd: WebApplicaiotn
        return {'type':'httpd',
                'host':'localhost', # Set server IP address
                'port':8088,
                'root':'/EUJP'}     # Set Site Name
     :

修正箇所はgetServerCfg:root
修正後に、httpdを再起動し、http://(HOSTNAMEorIPADDR)/EUJP/botlog/editにアクセスしすると同じデータが表示される。

DB

デフォルトでは、sqlite3が動作確認用DBとして設定されている。
sqlite3のDBは単一ファイルなので、ファイルの保存ディレクトリを変更すればいい。

    # sqlite3用DB設定
    def getSqlite3Cfg(self):
        # file: db file
        #       dbファイルのフルパスを設定
        #       * 作成したファイルとファイルのあるディレクトリのパーミッションは"777"にしておくか
        #         Webサーバーのユーザー(通常はapache/apache)が読み書きできるようにしておくこと
        return {'file':'/opt/OperationLog/data/botlog/db/sqlite3/botlog.sqlite3'}

コメントにも書いてあるように、DBファイルとディレクトリのパーミッションは"777"にしないと動作しなくなるので注意。

DBをPostgreSQLに変更する場合には、

    # DB種別設定
    def getDbCfg(self):
        # type: [ sqlite3 | postgresql ]
        #return {'type':'sqlite3'}
        return {'type':'postgresql'}


    # postgresql用設定
    # userは設定しないとhttpd user(apache)で書き込むので、
    # DB管理用ユーザー(作成ユーザー)を設定すること
    def getPostgresqlCfg(self):
        return {'host':'localhost',  <-- DBホスト
                'port':5432,         <-- 接続ポート番号
                'db':'botlog',       <-- DB名(これは変えなくてもいい)
                'user':'logoper',    <-- DB接続ユーザー名
                'passwd':''}         <-- DB接続パスワード

の設定を変更する。
PostgreSQL自体の設定はここでは説明しない。

セクション(グルーブ)設定

セクション名の設定は、SQLを直接実行するか、/opt/OperationLog/botlog/sql/[sqlite3|PostgreSQL]/section.sqlを編集したデータを各DB用のコンソールから設定する。
但し、idが0,1は特別な意味を持っているので、設定は変更しないこと。

データがない初期状態ならば、テーブルを一括で作成するスクリプトを作成しているので、それを利用すると一括でテーブルを再構築する。

  • sqlite3 の場合
    [user@localhost ~]$ /opt/OperationLog/botlog/sql/sqlite3/createTable.sh /opt/OperationLog/data/botlog/db/sqlite3/botlog.sqlite3
    
  • PostgreSQLの場合

PostgreSQLの場合には、DBへ接続するための設定をシェルスクリプト内に記述してから実行すること。

[user@localhost ~]$ /opt/OperationLog/botlog/sql/PostgreSQL/createTable.sh

PrintAnyServer

Attachments (3)

Download all attachments as: .zip