Организации обычно генерируют большие объёмы журналов сервисов (в форматах JSON или CSV), часто распределённые по локальным серверам или сторонним облачным платформам. Для централизованного поиска и аналитики в реальном времени вы можете выбрать агрегацию таких данных в кластеры CSS OpenSearch. Однако по соображениям безопасности кластеры CSS часто развертываются в частных сетях (например, VPC), что ограничивает прямое поглощение данных из внешних источников. В этом разделе описывается, как с помощью open-source Logstash безопасно и эффективно поглощать данные в кластеры CSS как в частных, так и в публичных сетевых средах.
Logstash — это open-source, серверный конвейер обработки данных, который одновременно поглощает данные из нескольких источников, обрабатывает и преобразует их, а затем отправляет в кластеры CSS. Для получения дополнительной информации о Logstash см. официальный документ Getting started with Logstash.
В зависимости от места развертывания сервера Logstash это решение может использовать одну из следующих сетевых архитектур:
Logstash развернут на ECS, который находится в том же VPC, что и целевой кластер CSS.
Характеристики: быстро, просто в настройке и безопасно.
Рисунок 1 Logstash и CSS в одном VPC

Logstash развернут в локальном дата‑центре или на сервере, расположенном в публичной сети, что не позволяет ему напрямую обращаться к целевому кластеру CSS в частной сети. Для соединения необходимо использовать ECS с публичным IP‑адресом в качестве jump‑сервера. Этот jump‑сервер использует SSH‑перенаправление портов для передачи трафика от Logstash к целевому кластеру в облаке.
Характеристики: подходит для миграции локальных данных в облако; необходимо настроить перенаправление портов. Рисунок 2 Logstash развернут в локальном дата‑центре или в публичной сети
Скачайте Logstash OSS по https://www.elastic.co/downloads/past-releases?product=logstash-oss.
Для примера, файл access_20181029.log уже находится в каталоге /tmp/access_log/ на сервере Logstash. Ниже приведён пример данных:
Ping приватного сетевого адреса кластера CSS с ECS, где планируется развернуть Logstash. Если успешно, они соединены.
yum install java # Replace it with the actual JDK version.
yum install logstash-oss-7.10.0-x86_64.rpm
Замените logstash-oss-7.10.0-x86_64.rpm на фактическое имя пакета установки Logstash.
Стандартный размер кучи памяти Logstash составляет 1 ГБ. Рекомендуется изменить его до половины памяти узла кластера.
vim /etc/logstash/jvm.options-Xms4g-Xmx4g
cd /logstash-x.x/ # Go to the Logstash installation directory.vi logstash-simple.conf # Create a configuration file.
input {# Read local log files.file {path => "/tmp/access_log/*.log" # Path to the log filesstart_position => "beginning" # Start position for reading data}}filter {# Add data filtering logic here, such as grok and mutate.}output {elasticsearch {# Enter the cluster's private network address. For a multi-cluster node, enter multiple addresses to allow for load balancing.hosts => ["192.168.xxx.xxx:9200", "192.168.xxx.xxx:9200"]# Name of the index that events are written to.index => "my_import_index"# Configure the following for a security-mode cluster. (Delete them if security mode is disabled.)# user => "username" # CSS cluster account# password => "password" # CSS cluster password# ssl => true # Whether SSL is enabled# ssl_certificate_verification => false # Whether to enable certificate authentication# cacert => "/logstash/config/CloudSearchService.cer" # Absolute path to the security certificate# Commonly configured parameters to mitigate compatibility issuesilm_enabled => false # Disable index lifecycle management to prevent permission errors.manage_template => false # Disable template management.}}
./bin/logstash -f logstash-simple.conf # Replace the file name with the actual configuration file name.
Если возвращено сообщение, похожее на Successfully started Logstash API endpoint, и ошибка не сообщается, задача работает корректно.
Левая часть консоли — это поле ввода команды, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
GET my_import_index/_count # Check the number of records ingested.GET my_import_index/_search # Check the content of the ingested data.
Если результаты соответствуют источнику, загрузка данных выполнена успешно.
ssh -g -L <Local port on the jump server>:<Private IP address of a CSS cluster node>:9200 -N -f root@<The jump server's private network address>
Например, если открытый локальный порт (разрешённый правилами security group) на jump server — 9100, приватный IP‑адрес узла кластера CSS — 192.168.0.81, а приватный IP‑адрес jump server — 192.168.0.227, команда перенаправления портов выглядит следующим образом:
ssh -g -L 9100:192.168.0.81:9200 -N -f root@192.168.0.227
If the specified CSS cluster node is unavailable, the port mapping command will fail. If the cluster contains multiple nodes, replace <Private IP address of a CSS cluster node> with the IP address of another node. If the cluster contains only one node, you have to wait until the node recovers.
Для получения дополнительной информации о SSH‑туннелировании см. SSH official documents.
curl http://<The jump server's public IP address>:<The jump server's local port>
If the OpenSearch version information is returned, the tunnel is established. When you configure the Logstash configuration file later, set hosts to <The jump server's public IP address>:<The jump server's local port>.
yum install java # Replace it with the actual JDK version.
yum install logstash-oss-7.10.0-x86_64.rpm
Замените logstash-oss-7.10.0-x86_64.rpm на фактическое имя пакета установки Logstash.
По умолчанию размер кучи Logstash составляет 1 ГБ. Рекомендуется изменить его до половины памяти узла кластера.
vim /etc/logstash/jvm.options-Xms4g-Xmx4g
cd /logstash-x.x/ # Go to the Logstash installation directory.vi logstash-simple.conf # Create a configuration file.
input {# Read local log files.file {path => "/tmp/access_log/*.log" # Path to the log filesstart_position => "beginning" # Start position for reading data}}filter {# Add data filtering logic here, such as grok and mutate.}output {elasticsearch {# Enter the local address for the SSH tunnel.hosts => ["<The jump server's public IP address>:<The jump server's local port>"]# Name of the index that events are written to.index => "my_import_index"# Configure the following for a security-mode cluster. (Delete them if security mode is disabled.)# user => "username" # CSS cluster account# password => "password" # CSS cluster password# ssl => true # Whether SSL is enabled# ssl_certificate_verification => false # Whether to enable certificate authentication# cacert => "/logstash/config/CloudSearchService.cer" # Absolute path to the security certificate# Commonly configured parameters to mitigate compatibility issuesilm_enabled => false # Disable index lifecycle management to prevent permission errors.manage_template => false # Disable template management.}}
./bin/logstash -f logstash-simple.conf # Replace the file name with the actual configuration file name.
Если возвращается сообщение, похожее на Successfully started Logstash API endpoint, и ошибок не обнаружено, задача работает корректно.
Левая часть консоли представляет собой поле ввода команды, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
GET my_import_index/_count # Check the number of records ingested.GET my_import_index/_search # Check the content of the ingested data.
Если результаты соответствуют источнику, загрузка данных прошла успешно.
Чтобы получить доступ к OpenSearch‑кластеру в режиме безопасности, использующему HTTPS, выполните следующие действия для получения сертификата безопасности CloudSearchService.cer, если он требуется.