Grafana に慣れておくと嬉しい気がするので,私に直接関わりあるデータとして株価を観測することにします.
追記:実装を途中で投げ出しました.敗因は各社ごとにデータフォーマットが異なることとデータが取るのが大変なサイトがあったこと……
メインの参考文献:
MySQLのデータをgrafanaで表示させてみた(https://ludwig125.hatenablog.com/entry/2020/12/05/064958)
環境
- Ubuntu 18.04 LTS
1.Docker install 〜 run Grafana & MySQL
sudo apt update
sudo apt install docker.io
docker の権限周りでエラーが出たので以下のサイトを参考に追加する.
- dockerコマンドでpermission deniedが発生する時の対処 (https://zenn.dev/botamotch/scraps/43f6b5e560137f)
- Got permission denied while trying to connect to the Docker daemon socket at 解決方法(https://qiita.com/Nw3965/items/8e75da0012cb7a451cc2)
sudo usermod -aG docker YOUR_NAME
sudo chmod 666 /var/run/docker.sock
Grafana をインストール,サーバの起動
- Install Grafana on Debian or Ubuntu(https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/)
sudo apt-get install -y apt-transport-https software-properties-common wget
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com beta main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
systemctl start grafana-server
データが消えないようにボリュームを作って永続化,MySQL サーバの起動
docker volume create mysql
docker container run --name mysql-server -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=YOUR_PASSWORD -p 3306:3306 -itd mysql:latest
最初 port を expose するのを忘れていたり background で動かし忘れていたりしたのでその修正には以下のサイトを参考にした.
- Dockerコンテナで起動したサーバにアクセスできないときの確認と対処方法(https://plus-idea.net/docker-web-server-access-denied/)
- 【docker】コンテナがExited (0)で起動しない時の対応(https://qiita.com/messhii222/items/01ae86ebedd576355fab)
2.MySQL 設定
データベースと権限設定したユーザを追加する.
ユーザとしては grafana 用の read only なユーザ(grafana)とデータを定期的に追加するために read/write 可能なユーザ(cron)を準備した.
docker exec -it mysql-server bash
mysql -p
# enter your password
CREATE DATABSE stock;
CREATE USER 'grafana' IDENTIFIED BY 'PASSWORD';
CREATE USER 'cron' IDENTIFIED BY 'PASSWORD';
GRANT SELECT ON stock.* TO 'grafana';
GRANT ALL PRIVILEGES ON stock.* TO 'cron';
過剰な権利を与えたりしたら次のようにする.
- ユーザーから権限を削除する(REVOKE文)(https://www.javadrive.jp/mysql/user/index8.html)
3.データを定期記録するプログラムを作成
どこからデータを引っ張ってこればいいかをいい感じに調べて,それを MySQL に食わせるためのプログラムを Python で簡単に書く.とりあえずは環境構築.
sudo apt install python3 python3-pip
pip3 install mysql-connector==8.0.19
最新版の mysql-connector を使ったときにエラーを吐いたのでバージョンを合わせた.
- Connecting to MySQL 5.6 using TLSv1 on Ubuntu 20.04.1(https://www.stefanproell.at/posts/2020-08-18-ubuntu20-04-01-mysql5.6/)
次はコードを書く.
(投了したので概要だけ)
- データソースのサイトを探して GET する
- python で適度にデータ処理してデータベースに突っ込む
- (crontab に追加して定期的にデータをアップデートする)
このあとは Grafana と MySQL をつなげて表示までいけたら良かったのですが,残念なことに各社それぞれ自由なフォーマットを使っていることに気づき,流石に修正しきれないので投了しました.
気が向いたら実装を追加,くらいでしょうか……
コメントを残す