Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
logging etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
logging etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Mart 2015 Cuma

Elasticsearch ile uygulama loglama - Application logging with Elasticsearch

Önce elasticsearch head plugin windows'a nasıl kurulur:

Plugin bize durumu görme sorgu gönderme vs. kolaylıkları sağlayacak:

  1. Önce log indexini yaratalım
  2. Sonra loglanacak hash'imizin veri yapısına göre mapping
  3. verimizi girelim
  4. Tüm verilerimizi görecek sorgu çakalım

  1. Önce log indexi olan diviner_log'u oluşturalım:
    PUT http://localhost:9200/diviner_log/
  2. Hash'imize göre map oluşturalım. Buradaki püf noktası automatic _id yaratıyor olmamız ve bu id için gönderdiğimiz içinde milisaniyelik bilgi olan tarih alanını kullanacağız. Bu sayede loglamak istediğimiz bilginin id alanından loglarına erişeceğiz ama tarih alanı her defasında farklı gideceği için versiyonlamış olacağız. Elasticsearch'ün aynı _id değerine PUT ile gönderdiğimiz değerlerin kaçıncı _versyion olduğunu söylemesine rağmen X versiyonunu çekip vermemesi nedeniyle eşsiz _id değerlerini işlemin gerçekleştiği tarih olarak oluşturuyoruz:
    PUT http://localhost:9200/diviner_log/ihale/_mapping
    {
      "ihale": {
        "_id": {
          "path": "tarihi"
        },
        "properties": {
          "id": {
            "type": "long"
          },
          "konusu": {
            "type": "string"
          },
          "tarihi": {
            "type": "date"
          }
        }
      }
    }
    Hadi birde _mapping sonucuna bakalım nasıl olmuş:
    Mapping sonucunu görelim:
    GET http://localhost:9200/diviner_log/ihale/_mapping
    {
      "diviner_log": {
        "mappings": {
          "ihale": {
            "_id": {
              "path": "tarihi"
            },
            "properties": {
              "id": {
                "type": "long"
              },
              "konusu": {
                "type": "string"
              },
              "tarihi": {
                "type": "date",
                "format": "dateOptionalTime"
              }
            }
          }
        }
      }
    }
  3. Veri girelim
    POST http://localhost:9200/diviner_log/ihale/
    {
      "id": 1,
      "konusu": "Diyaliz makinesi alımı",
      "tarihi": "2015-03-12T15:44:50.488Z"
    }

    Cevabı:
    {
      "_index": "diviner_log",
      "_type": "ihale",
      "_id": "2015-03-12T15:44:50.488Z",
      "_version": 1,
      "created": true
    }

  4. Tüm verilerimizi görecek sorgu çakalım
    {
      "query": {
        "bool": {
          "must": [
            {
              "wildcard": {
                "ihale.konusu": "*"
              }
            }
          ],
          "must_not": [],
          "should": []
        }
      },
      "from": 0,
      "size": 10,
      "sort": [],
      "facets": {}
    }

    Sonuçlar:
    {
      "took": 8,
      "timed_out": false,
      "_shards": {
        "total": 6,
        "successful": 6,
        "failed": 0
      },
      "hits": {
        "total": 4,
        "max_score": 1,
        "hits": [
          {
            "_index": "diviner_log",
            "_type": "ihale",
            "_id": "2015-03-12T15:44:50.489Z",
            "_score": 1,
            "_source": {
              "id": 2,
              "konusu": "AV Seti alımı",
              "tarihi": "2015-03-12T15:44:50.489Z"
            }
          },
          {
            "_index": "diviner_log",
            "_type": "ihale",
            "_id": "2015-03-12T15:44:50.491Z",
            "_score": 1,
            "_source": {
              "id": 2,
              "konusu": "AV Seti alımı - ver 3",
              "tarihi": "2015-03-12T15:44:50.491Z"
            }
          },
          {
            "_index": "diviner_log",
            "_type": "ihale",
            "_id": "2015-03-12T15:44:50.488Z",
            "_score": 1,
            "_source": {
              "id": 1,
              "konusu": "Diyaliz makinesi alımı",
              "tarihi": "2015-03-12T15:44:50.488Z"
            }
          },
          {
            "_index": "diviner_log",
            "_type": "ihale",
            "_id": "2015-03-12T15:44:50.490Z",
            "_score": 1,
            "_source": {
              "id": 2,
              "konusu": "AV Seti alımı - ver 2",
              "tarihi": "2015-03-12T15:44:50.490Z"
            }
          }
        ]
      }
    }




  5. Şimdi id değerine göre loglara bakalım:



  6. Gelen sonuçlar score'a göre sıralandı ama bizim log sonuçları işlem tarihine göre sıralansın:
    {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "ihale.id": "2"
              }
            }
          ],
          "must_not": [],
          "should": []
        }
      },
      "from": 0,
      "size": 10,
      "sort": [
        {
          "ihale.tarihi": {
            "order": "asc"
          }
        }
      ],
      "facets": {}
    }

    Sonuç kümesini görelim:
    ... "hits": [
        {
          "_index": "diviner_log",
          "_type": "ihale",
          "_id": "2015-03-12T15:44:50.489Z",
          "_score": null,
          "_source": {
            "id": 2,
            "konusu": "AV Seti alımı",
            "tarihi": "2015-03-12T15:44:50.489Z"
          },
          "sort": [
            1426175090489
          ]
        },
        {
          "_index": "diviner_log",
          "_type": "ihale",
          "_id": "2015-03-12T15:44:50.490Z",
          "_score": null,
          "_source": {
            "id": 2,
            "konusu": "AV Seti alımı - ver 2",
            "tarihi": "2015-03-12T15:44:50.490Z"
          },
          "sort": [
            1426175090490
          ]
        },
        {
          "_index": "diviner_log",
          "_type": "ihale",
          "_id": "2015-03-12T15:44:50.491Z",
          "_score": null,
          "_source": {
            "id": 2,
            "konusu": "AV Seti alımı - ver 3",
            "tarihi": "2015-03-12T15:44:50.491Z"
          },
          "sort": [
            1426175090491
          ]
        }
      ]...




19 Şubat 2015 Perşembe

Node.js loglarınızı winston-redis ile Redis db de tutma

Kod içinde winston nasıl log seviyesini belirliyor ve redis tarafında nasıl tutuyoru görebilirsiniz:
var winston = require('winston'),
    winstonRedis = require('winston-redis').Redis;

// console'da sadece hepsi tutuluyor olacak çünkü info log seviyesinden sonra diğer tüm log seviyeleri sıralanmış
var transportConsole = new winston.transports.Console({ json: false, timestamp: true, prettyPrint:true, colorize: true, level:'info' }),
// File'da sadece i ve db tutuluyor olacak çünkü i den sonra db log seviyesi sıralanmış
    transportFileDebug = new winston.transports.File({ filename: __dirname + '/debug.log', json: true }),
    transportFileException = new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false }),
    // rediste sadece db tutuluyor olacak çünkü db den sonra bir log seviyesi yok
    transportRedis = new (winstonRedis)({host: '127.0.0.1', port: 6379, level:'db'});


var logger = new (winston.Logger)({
    levels: {
        info: 0,
        warn: 1,
        error: 2,
        verbose: 3,
        i: 4,
        db: 5
    },
    transports: [
        transportConsole,
        transportFileDebug,
        transportRedis
    ],
    exceptionHandlers: [
        transportConsole,
        transportFileException
    ],
    exitOnError: false
});

winston.addColors({
    info: 'green',
    warn: 'cyan',
    error: 'red',
    verbose: 'blue',
    i: 'gray',
    db: 'magenta'
});

logger.i('iiiii foobar level-ed message');
logger.db('dbbbbb foobar level-ed message');
logger.info('infoo foobar level-ed message');
logger.warn('warnnnn foobar level-ed message');
logger.error('errroor foobar level-ed message');

module.exports = logger;