Grafana Loki

  • Github
    > git clone git@github.com:grafana/loki.git
  • Docker
    > cd loki/production
    > docker-compose pull
    > docker-compose up
  • Grafana
    Used for visualization of log file data.
    • Open Browser
      http://localhost:3000
    • Credentials
      Username: admin
      Password: admin
    • Activate Loki
  • promtail
    Pushes log file content to Grafana Loki.
    1. Open https://github.com/grafana/loki/releases
    2. Download e.g. promtail-windows-amd64.exe.zip
    3. Unzip
    4. Configuration
      1. Create config.yaml, for content see appendix
      2. Hints
        1. Keep attention to parse your timestamp correctly, otherwise you will see only the date/time of the import timestamp. Timestamps are handled by go, so use online editors to check your parsings, https://play.golang.org/
        2. Keep attention on multilines.
        3. Regular expressions can be quiet comprehensive to read, so use online regex parser/checker, e.g. https://regex101.com/
  • Start promtail
    promtail.exe -config.file=config.yaml
  • Back to Grafana

Appendix

config.yaml

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: D:/promtail/positions.yaml # will be created automatically by promtail. This location needs to be writeable by promtail.

client:
  url: http://localhost:3100/loki/api/v1/push
  basic_auth:
    username: admin
    password: admin

scrape_configs:
  - job_name: MyApp
    pipeline_stages:
    - multiline: # identify timestamps as first line of a multiline block.
        firstline: '^\d{4}-\d{2}-\d{2}.\d{1,2}:\d{2}:\d{2}.\d{4}'
        max_wait_time: 3s
    - regex: #https://regex101.com/ #http://www.rexegg.com/regex-quickstart.html#modifiers
        expression: '^(?P<date>\d{1,4}.\d{1,2}.\d{1,2}).(?P<time>\d{1,4}.\d{1,2}.\d{1,2}).(?P<ms>\d{1,3})..(?P<level>[\w\s]+)'
    - template:
        source: time
        template: '{{ .date }}T{{ .time }}.{{ .ms }}+02:00'
    - timestamp:
        source: time
        format: "2006-01-02T15:04:05.000-07:00" # https://play.golang.org/ #time.Parse
    - labels:
        level:
    static_configs:
      - targets:
          - localhost
        labels:
          job: MyApp # A `job` label is fairly standard in prometheus and useful for linking metrics and logs.
          host: workstation # A `host` label will help identify logs from this machine vs others
          agent: promtail
          __path__: D:/logs/*.log

Docker in Hyper-V Image

Using Docker in a Hyper-V image can be that easy – if you know how to do that. The use case is quite simple: imagine you have a company or private infrastructure that runs on a server. This server runs multiple instances of Windows (Server) where one instance is used for developing and another for testing. Now if the assignement is to create a Docker image that runs your application than you might have the same problems that I had – I didn’t work on a fast try. So here is the short and simple solution of a few hours of trying and searching.

Preferences Hyper-V Host

  1. Start Hyper-V-Manager
  2. Write down name of the image that should run Docker for Windows
  3. Download the following script
    https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/live/hyperv-tools/Nested/Enable-NestedVm.ps1
  4. Open powershell as Administrator
  5. Execute script
powershell -ExecutionPolicy Bypass -File .\Enable-NestedVm.ps1 {Hyper-V-image-name-that-should-run-Docker}

Explaination
-ExecutionPolicy Bypass: by default, no one is allowed to execute unsigned scripts, so bypass this setting. Just try it out without this parameter and you will see the response.
-File: the file to execute

Preferences Hyper-V Image

  1. Enable Windows Features
    + Containers
    + Hyper-V
  2. Download
    https://docs.docker.com/docker-for-windows/install/
  3. Install Docker
  4. Concratulation, you successfully installed Docker in a Hyper-V image!