iku8log

Webエンジニア、SEO、Web解析等々しております。タダのメモ。

プロメテウス、node_exporterの構築メモ

プロメテウス、node_exporter 構築

Screen

screen使うと色々起動する時便利だわ

  • 新規作成

    • ctrl+a c
  • 切り替え

    • ctrl+a n
  • アタッチ(入る)

    • screen -r ID
    • セッション一つならidいらず

Goインストール

/usr/local/srcにファイルを落とす

sudo wget https://storage.googleapis.com/golang/go1.9.1.linux-amd64.tar.gz 

解凍 local以下にgoを配置

sudo tar -C /usr/local -xzf go1.9.1.linux-amd64.tar.gz

パスを通す

export PATH=$PATH:/usr/local/go/bin

以下のページ通りのインストール https://golang.org/doc/install?download=go1.9.1.linux-amd64.tar.gz

プロメテウス

https://prometheus.io/download/ ダウンロードページ

ファイルダウンロード

sudo wget https://github.com/prometheus/prometheus/releases/download/v1.8.0/prometheus-1.8.0.linux-amd64.tar.gz

解凍

sudo tar xvfz prometheus-1.8.0.linux-amd64.tar.gz

usr/localに移動させとく

mv prometheus-1.8.0.linux-amd64 ../prometheus

設定ファイルを指定して、起動

sudo ./prometheus --config.file=prometheus.yml

node exporter

インストール

https://github.com/prometheus/node_exporter/releases

リリースノートからインストールするもんを選択する

ファイルをダウンロード

/usr/local/srcにでも置きますかね

sudo wget https://github.com/prometheus/node_exporter/releases/download/v0.15.0/node_exporter-0.15.0.linux-amd64.tar.gz

解凍

sudo tar -C /usr/local -xvf node_exporter-0.15.0.linux-amd64.tar.gz

ディレクトリの名前適当に変えておく、バージョンあってもみにくいから

シンボリックリングを貼る

sudo ln -s /usr/local/node_exporter/node_exporter /bin/node_expoter

node_expoter起動

node_expter

プロメテウスにnodeの設定

  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

URL

http://192.168.33.11:9090/consoles/prometheus.html

Laravel5.5で自動でサイトマップを作成する方法

Laravelでとあるサイトを作っているのですが、ページ数が増えすぎて、自分でわっせわっせとサイトマップを作るのが面倒になってので、

「毎日自動でサイトマップを作る」

という仕様にしてみました。

自分のサイトのドメインを設定することで、サイト内をクロール?して自動的にサイトマップを作ってくれます。

※コードはしっかり読んでないので詳しくありません。

流れと環境

最初にざっくりと、「環境」と、「サイトマップを自動で作成するまでの流れ」を書いときます。

環境

  • OS: CentOS7
  • PHP: 7.0.23
  • Laravel: 5.5.12

流れ

  1. プロジェクトを用意する(自分がLaravelで作ったサイト)
  2. spatie/laravel-sitemapをインストール
  3. Laravelのコマンドに登録する
  4. Laravelのスケジュールにコマンドを登録する
  5. cronでスケジュールを設定

spatie/laravel-sitemapをインストール

このパッケージは「Laravelium/laravel-sitemap」の派生版?みたいな感じでした。

Automatically generate a sitemap in Laravel - murze.be

↑によると、「Laravelium/laravel-sitemap」は手動でしかサイトマップを登録出来ないけど、「spatie/laravel-sitemap」では自動で出来るよ!

みたいな感じのことを書いていました。

とりあえず、GitHubのreadme通りに作ってみました。 https://github.com/spatie/laravel-sitemap#generating-the-sitemap-frequently

まず以下を実行↓

$composer require spatie/laravel-sitemap

composer.jsonが書き換わるので、アップデートします↓

$composer update

終わると、vendor以下に必要なファイルが作られているはずです。

Laravelのコマンドに登録する

続いてサイトマップ作成を実行させるためのコマンド作りです。

app/Console/Commands/GenerateSitemap.phpというファイルを作成します。Commandsというディレクトリは無いので作ってください。

<?php
namespace App\Console\Commands;

use Illuminate\Console\Command;
use Spatie\Sitemap\SitemapGenerator;

class GenerateSitemap extends Command
{
    // コマンド名を設定
    protected $signature = 'create_sitemap';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Generate the sitemap.';

    // コマンド実行時に呼び出される
    public function handle()
    {
        // プロジェクトのURL以下を解析し、sitemap.xmlという名前でサイトマップを作成する
        SitemapGenerator::create('http://iku8.hatenablog.com/preview:title')
            ->writeToFile(public_path('sitemap.xml'));
    }
}

これでコマンドの登録はできました。

今回個のブログのURLを設定していますが、config(‘app.url’)をcreateの引数にすることで、そのプロジェクトのサイトマップを作ってくれます。 試しに、実行してファイルが作られるか見てみましょう。

$php artisan create_sitemap

publicディレクトリ配下にsitemap.xmlが作成されているはずです。

sitemap.xmlの内容は以下です↓

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <url>
        <loc>http://iku8.hatenablog.com/</loc>


        <lastmod>2017-09-24T12:18:21+00:00</lastmod>

        <changefreq>daily</changefreq>

        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://iku8.hatenablog.com/?page=1488002585</loc>


        <lastmod>2017-09-24T12:18:21+00:00</lastmod>

        <changefreq>daily</changefreq>

        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://iku8.hatenablog.com/?page=1497193113</loc>


        <lastmod>2017-09-24T12:18:21+00:00</lastmod>

        <changefreq>daily</changefreq>

        <priority>0.8</priority>
    </url>
 ・
 ・
 ・

ちゃんとサイトマップになっていますね!

Laravelのスケジュールにコマンドを登録する

コマンドで実行することは出来ましたが、毎回実行するのは面倒なので、この実行もLaravelに自動でしてもらいましょう。

一日おきにサイトを解析し、サイトマップを作成してもらいます。

app/Console/Kernel.phpを以下のように編集します。

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    // スケジュール登録
    protected function schedule(Schedule $schedule)
    {
        // 一日おきにcreate_sitemapコマンドを実行する
        $schedule->command('create_sitemap')->daily(); // ←編集はここだけ
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

動きだけ確認したい場合は、dairy()じゃなくてeveryMinute()を使ってみてください。1分ごとにサイトマップ作ってくれますよ。

cronでスケジュールを設定する

スケジュールを登録しただけでは、まだ実行されないので、cronで発火させます。

cronファイルを編集

$crontab -e

上記のコマンドでファイル編集画面になるので、以下を追記します。

* * * * * php /home/vagrant/sitemap/artisan schedule:run >> /dev/null 2>&1

これでLaravelのスケジュールが読まれるようになりました。

これで設定は以上です! あとは1日おきにサイトマップが作成されるのでほっておきましょう!

もちろんサイトマップは上書きです。

ブラウザでサイトマップが見えるか確認した場合は、自分のURL/sitemap.xmlを見ましょう。

頭がいい人はいろんな便利なものを作ってくれるので、助かります…。 設定も簡単で助かりました。 やはり日本語の情報は少ないですが。

何かミスってったら指摘おねがいしやす。

今回作成したコードをGitHubにアップしておきました。

github.com

MySQLでのサンプルDB「sakila」を使ってみるとエラー出た

最近、SQLものすごく大事だなと思って勉強しています。 SQL(主に参照系)を勉強したいので、勉強するにしてもテーブルとかデータとか考えて作るのは面倒。

そこで、いいサンプル無いかなと探していると、MySQLが提供している「sakila」というサンプルDBを発見しました! MySQL :: Other MySQL Documentation 「sakila database」があるので、zipとかでダウンロードしてください。

SQLでのimport手順は下記にあります。僕は面倒なので、MySQL WorkBenchでimportしました。 MySQL :: Sakila Sample Database :: 4 Installation

※現時点でimportするまでしかしてないです。

と、import作業を行っていると、テーブルが途中までしか入っていないのを発見。 いろいろ問題があったので調べてみました。

環境

CentOS7 5.5.52-MariaDB

問題点と改善策

sakira The used table type doesn't support FULLTEXT indexes

MySQL WorkBenchでimportした際に、このようなエラーメッセージが出てきました。 FULLTEXTとはインデックスのことのようです。特定の文字列を渡してあげると、マッチ度合いが高いものから抽出されるようです(メモ程度)。 MySQLで全文検索 - FULLTEXTインデックスの基礎知識|blog|たたみラボ

で、このFULLTEXTの何が問題かというと、「私のDBのバージョンではサポートされていませんでした」というのが結論です。 どうやらMariaDB5系では不可でした。

正確に言うと、データベースエンジンが問題だったようで。公式サイトによると

Full-text indexes can be used only with MyISAM and Aria tables, from MariaDB 10.0.5 with InnoDB tables and from MariaDB 10.0.15 with Mroonga tables

つまり、データベースエンジンのMySAMとAriaではMariaDB 10.0.5からサポート、InnoDBでは10.0.15からサポート(間違ってらコメント下さい) で、sakila.schema.sql(テーブル作るやつ)を見ると、FULLTEXTを使うテーブルにInnoDBと記述されていたので、MariaDB10.0.15以上が必要だとわかります。

CREATE TABLE film_text (
  film_id SMALLINT NOT NULL,
  title VARCHAR(255) NOT NULL,
  description TEXT,
  PRIMARY KEY  (film_id),
  FULLTEXT KEY idx_title_description (title,description)
)ENGINE=InnoDB DEFAULT CHARSET=utf8; --ここ!

MariaDBをアップデートして上げたら、問題なく全てのテーブルがimportされ、データもimportすることが出来ました。 以下でアップデート出来る。 https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university&distro=CentOS&distro_release=centos7-amd64–centos7&version=10.1

これから、sakilaのDBを使って、SQLを書く練習をしていきます。また、それもいつか共有しまっす!

コメント

SQLってホント大事。な気がすごくする。 データベースエンジンもまだちゃんと理解してない。 MySQLMariaDBの違いも微妙。

DBって奥が深いぜ。