sansible.rsyslog
Rsyslog
Ta rola instaluje rsyslog v8 do wysyłania logów.
Aby uzyskać więcej informacji na temat rsyslog, odwiedź dokumentację rsyslog.
Instalacja i zależności
Aby zainstalować, uruchom ansible-galaxy install sansible.rsyslog
lub dodaj to do swojego
roles.yml
- name: sansible.rsyslog
version: v3.0
a następnie uruchom ansible-galaxy install -p ./roles -r roles.yml
Tagi
Ta rola używa dwóch tagów: build i configure
build
- Instaluje Rsyslog z wszystkimi zależnościami.
Wbudowane konfiguracje logów
Kilka wbudowanych konfiguracji jest dołączonych do wysyłania plików logów do Logstash. Te wbudowane konfiguracje są zaprojektowane dla określonych formatów plików logów i zawsze wychodzą w formacie JSON. Możesz zobaczyć przykładowe ustawienia dla każdej wbudowanej obsługi w pliku defaults/main.yml pod sekcją builtin_configs.
Pliki syslog
Domyślnie wiadomości syslog są wysyłane w formacie JSON, nie jest wymagana dodatkowa konfiguracja.
Wiadomości syslog są wysyłane w następującym formacie:
- typ - zawsze syslog
- host - nazwa hosta maszyny źródłowej
- znacznik czasu - data w formacie RFC-3339
- wersja - zawsze 2 dla logów JSON
- rola - to pole app_name z konfiguracji ról rsyslog
- wiadomość - sama linia logu
- priorytet - numer poziomu serwisu syslog
- program - nazwa usługi, która wygenerowała wiadomość
- obiekt - obiekt syslog
- poziom - nazwa poziomu serwisu syslog
{
"type": "syslog",
"host": "192.168.1.1",
"timestamp": "2017-10-21T14:29:30.739200+00:00",
"@version": "2",
"role": "some_application",
"message": "Coś się wydarzyło",
"priority": "3",
"program": "some-local-service",
"facility": "daemon",
"severity": "err"
}
Pliki logów autoryzacji
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
Wysyła wiadomości z fachu auth i authpriv, używa tej samej szablonu co wiadomości syslog, ustawiając pole type na authlog:
{
"type": "authlog",
"host": "192.168.1.1",
"timestamp": "2018-01-09T10:45:01.117615+00:00",
"@version": "2",
"role": "some_application",
"message": " pam_unix(cron:session): sesja zakończona dla użytkownika some_user",
"priority": "6",
"program": "CRON",
"facility": "authpriv",
"severity": "info"
}
Pliki logów w formacie tekstowym
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/var/log/some_log.log"
# typ domyślnie ustawia się na application_log, jeśli nie określono
options:
type: some_application_log
Wbudowana aplikacja_logs jest zaprojektowana do obsługi plików logów w formacie tekstowym. Linie w tych plikach logów są wysyłane bez zmian do Logstash w następującym formacie JSON:
- typ - pole typ z konfiguracji plików logów, użyteczne do filtrów Logstash
- host - nazwa hosta maszyny źródłowej
- znacznik czasu - data w formacie RFC-3339
- wersja - zawsze 1 dla logów tekstowych
- rola - to pole app_name z konfiguracji ról rsyslog
- sourcefile - lokalizacja pliku logu, z którego pochodzi linia
- wiadomość - sama linia logu
Na przykład:
{
"type": "application_log",
"host": "192.168.1.1",
"timestamp": "2017-10-21T13:58:40.098660+00:00",
"@version": "1",
"role": "some_application_log",
"sourcefile": "/var/log/some_log.log",
"message": "Linia logu w formie tekstowej"
}
Pliki logów w formacie JSON
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/var/log/some_log.log"
options:
type: some_application_log
Wbudowana aplikacja json_logs jest zaprojektowana do obsługi plików logów w formacie JSON, wszystkie pola są przesyłane jako JSON z dodanymi dodatkowymi danymi:
- typ - pole typ z konfiguracji plików logów, użyteczne do filtrów Logstash
- host - nazwa hosta maszyny źródłowej
- wersja - zawsze 2 dla logów JSON
- rola - to pole app_name z konfiguracji ról rsyslog
- sourcefile - lokalizacja pliku logu, z którego pochodzi linia
Na przykład, mając linię logu:
{ "message": "Jakaś wiadomość logu", "datetime": "2017-01-01 00:00:00", "level": "info" }
Będzie ona przesyłana jako:
{
"type": "some_application_log",
"host": "192.168.1.1",
"@version": "2",
"role": "some_application",
"sourcefile": "/var/log/some_log.log",
"message": "Jakaś wiadomość logu",
"datetime": "2017-01-01 00:00:00",
"level": "info"
}
Pliki logów dostępu Nginx
Wbudowana aplikacja nginx_access_logs zasadniczo jest taka sama jak wbudowana aplikacja json_logs, jedyną różnicą jest to, że pole typ jest twardo ustalone na nginx-access-logs.
Aby renderować logi dostępu Nginx w formacie JSON, możesz użyć poniższej konfiguracji w nginx.conf:
log_format main '{ '
'"http_host": "$http_host", '
'"clientip": "$remote_addr", '
'"datetime": "$time_iso8601", '
'"verb": "$request_method", '
'"request_full": "$request", '
'"response": "$status", '
'"response_length": "$body_bytes_sent", '
'"request_length": "$request_length", '
'"referrer": "$http_referer", '
'"agent": "$http_user_agent", '
'"request_time": "$request_time", '
'"upstream_time": "$upstream_response_time", '
'"user_id": "$http_x_user", '
'"request_id": "$http_x_request_id" '
'}';
access_log /var/log/nginx/access.log main;
Logi z kontenerów Docker
Konfiguracje logów z kontenerów Docker mają na celu dodanie ich do instancji kontenera ECS. Konfiguracja tworzy pliki gniazd unixowych na hoście, do których docker przesyła logi generowane przez uruchomione kontenery.
Logi w formacie tekstowym
sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true
Ta konfiguracja tworzy gniazdo w /var/run/rsyslog/text.sock Konfiguracja logowania w definicji zadania aplikacji powinna być następująca:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/text.sock"
},
}
Logi JSON
sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true
Ta konfiguracja tworzy gniazdo w /var/run/rsyslog/json.sock Konfiguracja logowania w definicji zadania aplikacji powinna być następująca:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/json.sock"
},
}
Logi tekstowe lub JSON przez Journald
sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false
Ta konfiguracja łączy się i nasłuchuje usługi journald. Będzie przetwarzać tylko pliki logów dla kontenerów, ignorując inne wpisy logów w journald. Zarówno JSON, jak i tekstowe dane wyjściowe z kontenerów mogą być przetwarzane. Dla podstawowego logowania konfiguracja logowania w definicji zadania aplikacji powinna być następująca:
"LogConfiguration": {
"LogDriver": "journald"
}
Dla wdrożeń ECS istnieje możliwość rozszerzenia metadanych dla wpisów logów, włączając:
sansible_rsyslog_custom_ecs_properties: yes
Jeśli to jest włączone, konfiguracja logowania w definicji zadania aplikacji powinna wyglądać następująco:
"LogConfiguration": {
"LogDriver": "journald",
"Log-Opts" : {
"labels": "role,ecs_task_container,app_version"
}
}
Przykłady
Aby zainstalować:
- name: Niektóre aplikacje
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/home/application_user/app_log.log"
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/home/application_user/app_log_json.log"
options:
type_tag: "application_log"
sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
- path: "/var/log/nginx/application_access.log"
Istnieją globalne domyślne ustawienia, które są stosowane do plików konfiguracyjnych, można je zobaczyć w vars/main.yml. Aby nadpisać lub dodać jakiekolwiek dodatkowe ustawienia, można użyć zmiennych sansible_rsyslog_config_global, sansible_rsyslog_config_imfile, sansible_rsyslog_config_main_queue oraz sansible_rsyslog_config_omfwd:
- name: Niektóre aplikacje
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/home/application_user/app_log.log"
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/home/application_user/app_log_json.log"
options:
type_tag: "application_log"
sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
- path: "/var/log/nginx/application_access.log"
sansible_rsyslog_config_global:
maxMessageSize: 32K
oversizemsg.input.mode: accept
sansible_rsyslog_config_imfile:
reopenOnTruncate: "on"
sansible_rsyslog_config_main_queue:
queue.size: 100000
sansible_rsyslog_config_omfwd:
action.resumeRetryCount: 10
Aby zainstalować bez domyślnej konfiguracji:
- name: Niektóre aplikacje
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_default_config: no
Aby zainstalować konkretne wersje pakietów:
- name: Niektóre aplikacje
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_version: "8.30*"
sansible_rsyslog_version_libfastjson4: "0.99.*"
sansible_rsyslog_version_mmjsonparse: "8.30.*"
ansible-galaxy install sansible.rsyslog