'logstash-' 날짜 형태로 인덱스를 자동 생성하는데, 여러 타이틀 혹은 용도 별로 분리하려면 수정이 필수적임. 



만약 새롭게 생성하는 상황이라면, 원하는 곳에 pipelines에 적용할 config 파일을 하나 만들자. 


( https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html 참고)



만약 이미 만들어 두었다면 config/pipelines.yml을 열어 pipeline.id의 path.config를 확인해보자.


이제 기본적인 pipeline config를 구성했다면 원하는 조건과 이름을 활용해 인덱스를 수정해보자.


만약 logstash에서 elasticsearch로 바로 보낸다면 output 부분이 아래와 같을 것이다. 


output { elasticsearch { hosts => ["IP Address:port"] } }



hosts아래에 인덱스 이름 조건을 아래와 같이 삽입하면 elasticsearch에서 인덱스 명이 수정된 것을 확인할 수 있다.



output { elasticsearch { hosts => ["IP Address:port"]

index => 'test-%{+YYYY.MM.dd}' } }



만약 다중 pipelines을 사용한다면 input의 type별로 인덱스를 다르게 할 수 있다.



input {

redis {

.

.

type => "game_name"

}

.

.

}

.

.



output {

if[type]=="game_name"{ elasticsearch { hosts => ["IP Address:port"]

index => 'test-%{+YYYY.MM.dd}' }

}

.

.

}




보다 상세한 내용은 https://www.elastic.co/guide/en/logstash/current/configuration.html 문서에서 찾을 수 있다.



'개발/경험 > linux' 카테고리의 다른 글

logstash 인덱스 수정하는 방법  (0) 2018.07.16
Kibana systemd 에 등록하기  (0) 2018.07.11
Elasticsearch 설치기  (0) 2018.07.06
메모리 사용양 측정 - mpstat  (1) 2015.04.10
apache2에서 perl 설정하기  (0) 2015.02.05
ubuntu apt-get source generate  (0) 2015.02.03

tar 파일 가져와서 설치했더니 데몬으로 가동이 안되는 상태.


rpm으로 다시 설치할까 그냥 systemd에 등록함. 


elasticsearch , kibana 모두 6.3 버전 사용.


/etc/systemd/system/kibana.service 파일을 만들어 아래 내용을 삽입.


[Unit]

Description=Kibana 6.3


[Service]

Type=simple

User=root

Environment=CONFIG_PATH=/your kibana path/config/kibana.yml

Environment=NODE_ENV=production

ExecStart=/your kibana path/node/bin/node /your kibana path/src/cli


[Install]

WantedBy=multi-user.target



systemctl daemon-reload 

systemctl start kibana

systemd로 start


systemctl status kibana 로 상태를 확인해보면 아래와 같이 나온다.


● kibana.service - Kibana 6.3

   Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: disabled)

   Active: active (running) since 화 2018-07-10 09:57:33 KST; 24h ago


'개발/경험 > linux' 카테고리의 다른 글

logstash 인덱스 수정하는 방법  (0) 2018.07.16
Kibana systemd 에 등록하기  (0) 2018.07.11
Elasticsearch 설치기  (0) 2018.07.06
메모리 사용양 측정 - mpstat  (1) 2015.04.10
apache2에서 perl 설정하기  (0) 2015.02.05
ubuntu apt-get source generate  (0) 2015.02.03

CentOS에 Elasticsearch를 설치해 보았다. 정리할 생각이 없었는데, 하다보니 중간에 막히는 것들이 처리하면서 정리 한번 해둬야겠단 생각이 들었다. 


일단 처음 설치할 때 주의할 점은 Elasticsearch는 root 계정으로 실행할 수 없다. (실행 가능하게 하는 옵션이 있던데, 최신 버전에서는 안되는 듯. 그리고 보안의 측면에서도 당연히 좋지 않아 추천하지 않는다.) 그러므로 전용 계정을 설정해서 설치, 실행하자.


설치 환경 및 각종 버전은 아래와 같다. 

CentOS  7.5.x

Elasticsearch 6.3.0 (https://www.elastic.co/downloads/elasticsearch)

plugin, Elastic-HQ (https://github.com/ElasticHQ/elasticsearch-HQ)



wget으로 다운로드 받아 설치한다. 별도 인스톨 과정은 없다. bin/elasticsearch 로 실행 가능.


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz

tar xvzf elasticsearch-6.3.0.tar.gz


실행전에 한 가지 수정하고 진행하자.

config/elasticsearch.yml에서 http.host를 자신이 사용하고자 하는 ip로 수정한다. 예를들어 내 ip가 172.150.x.x 이며 config를 수정하지 않고 실행할 경우 로컬에서 localhost로 접속은 되지만, 다른 PC에서 172.150.x.x로 접속되지는 않는다.


처음이니 데몬 옵션 주지말고 elasticsearch로 실행해보라. -d로 실행하며 혹시 모를 에러가 보이지 않으니 주의가 필요하다. 잘 실행되었는지 일단 확인해보자.


curl 172.150.x.x:9200 ( 혹은 config를 수정하지 않았다면 localhost:9200)  

아래와 같은 간단한 health 정보가 출력되면 정상이다. 





혹시 그래도 접속이 안된다면 iptables에 9200번 ACCEPT 처리를 해주자.


 firewall-cmd --zone=public --permanent --add-port=5000/tcp


이제 플러그인 Elastic-HQ를 설치해보자. 이를 설치하기 위해 python 3.4 이상의 버전이 필요하다. CentOS 7.5 버전에는 기본적으로 2.x 버전이 설치되어 있다. 3.4 이상의 버전을 추가로 설치한 후 아래로 진행하자. 


( http://docs.elastichq.org/installation.html 참고)


git clone https://github.com/ElasticHQ/elasticsearch-HQ.git


설치에 필요한 추가 라이브러리를 설치한다. 

pip install -r requirements.txt

아래와 같은 에러 발생.

python-socketio 2.0.0 has requirement python-engineio>=2.2.0, but you'll have python-engineio 2.0.2 which is incompatible.

바로 업그레이드 시킴
pip install --upgrade python-engineio

이제 아래와 같이 실행 가능해졌다.

python3 application.py &
위에서 따로 언급 안했지만 python 3.x 버전을 추가로 설치 후 python 링크를 python3.6으로 대체했다면 시스템에 여러 문제가 발생할 수 있다. 

리눅스 시스템, 특히 CentOS는 python2를 많이 사용하고 있기 때문이다. 그래서 가능하면 python3.6.x 버전을 python3으로만 단축해서 사용해야 한다. 

HQ의 접속 포트는 5000번이다. iptables에 추가 후 브라우져로 접속해보면 아래와 같은 화면을 볼 수 있다.




주소를 지정하면 다음 화면으로 넘어간다.

HQ는 백그라운드로 실행했으므로 종료 시킬 때는 kill로... 


공식 문서에 python manage.py runserver 이걸로 실행하라는 이야기 있는데 에러가 나고, 해결책은 관심없어서 안 찾아봤음. 게다가 root 로 실행해야 함. -0-a 해결 방법 아시는 분 계시면 댓글 부탁드립니다. (공손..)


이까지.. 


다음은 Kibana 설치와 샘플 올려서 그래프 보는 방법에 문제가 있으면 이어서 계속, 별 문제 없으면 스킵.  :)


큰 건 아니고 작은 허들이 있어서 기록해 둠.

다운로드는 아래와 같이. (kibana는 elasticsearch와 동일한 버전을 다운받아 설정해야 한다. 안그럼 시작 시 경고 등장함.)

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.0-linux-x86_64.tar.gz
압축을 풀고 config 일부를 수정하자.

config/kibana.yml에서  아래 사항을 설정한다. 


server.host: "yourkibanaip"

elasticsearch.url: "http://yourip:9200"

xpack.security.enabled: false   <<- 이에 대한 경고가 뜬다. 일단 테스트 과정이니 넘어감.


host 주소를 정확히 입력해두고, elasticsearch 주소 설정, 시작할 때 관리자 비번 안물어보게 설정.


이제 실행


bin/kibana


그럼 아래와 같은 화면을 볼 수 있다.




이제 logstash와 실제 데이터를 연동해서 결과를 만들어 볼 차례.


그 과정에 또 허들이 생기면 이젠 다른 글에 이어 정리할 예정. 바이~~~!



'개발/경험 > linux' 카테고리의 다른 글

logstash 인덱스 수정하는 방법  (0) 2018.07.16
Kibana systemd 에 등록하기  (0) 2018.07.11
Elasticsearch 설치기  (0) 2018.07.06
메모리 사용양 측정 - mpstat  (1) 2015.04.10
apache2에서 perl 설정하기  (0) 2015.02.05
ubuntu apt-get source generate  (0) 2015.02.03

공식 사이트는 이 곳!!

http://jsoncpp.sourceforge.net/ >> 현재는 github로 링크가 이동된다.


최근 코드는 많이 달라져 있어서 최근 코드 사용에 대해서는 추후 다시 한번 정리할 예정이다.


이번은 예전에 사용하던 코드를 활용하여 ( 파일 >>  jsoncpp.zip


일단 설치는 그냥 압축을 풀어 프로젝트에 적용하면 끝!! (h와 cpp 파일 각 하나씩만 존재한다.)


사용법은 아래와 같다. 


- 읽기


json 파일의 내용을 어딘가에서 읽어왔다면 Json::Reader를 사용하여 파싱하여야 한다.


std::string data;  << --- 이곳에 json 데이터가 있다고 가정하면.. 

Json::Reader reader;

Json::Value root;

reader.parse(data, root); <<-- data를 넣어주면 root 에 파싱된 json 정보를 넣어준다.


const Json::Value &name = root["name"]; << -- name이라는 키를 활용해서 정보를 가져오고..

std::string yourName= name.asString();  << --- as... 로 데이터를 캐스팅해서 가져온다.



- 쓰기


새롭게 정보를 쓸 때는 Json::Value 에 기록할 수 있다.


Json::Value root;

root["name"] = "Poppy";   << -- name이라는 키와 "Poppy"라는 값을 삽입하는 예

root["array sample"] = Json::Value(Json::arrayValue);   << -- "array sample"이라는 배열을 삽입하는 

root["array sample"].append( "array 1");                    <<-- 위처럼 정의해주지 않아도 append 하면 바로 배열로 저장됨. 어쨌든 값을 배열로 저장하는 과정.

root["array sample"].append( "array 2");



Json::Value에 저장된 값을 텍스트 형태로 다시 변환하는 건 아래와 같이 가능핟. 

Json::FastWriter fastWriter;
std::string output = fastWriter.write(root);


최근 업데이트된 코드를 보고 내용을 첨부할 예정. (예정... 예... 정... 예................. 정.............................)




'개발/경험 > C C++' 카테고리의 다른 글

jsoncpp 사용법 정리  (0) 2018.07.05

redis config 파일에서 암호를 지정할 수 있는데... 


requirepass 원하는암호


이렇게 설정할 수 있다. 


nodejs 에서 암호 설정 안하고 접근하면 아래와 같은 에러가 발생한다. 


ReplyError: Ready check failed: NOAUTH Authentication required.

    at parseError (/home/ec2-user/mwsdss/node_modules/redis-parser/lib/parser.js:193:12)

    at parseType (/home/ec2-user/mwsdss/node_modules/redis-parser/lib/parser.js:303:14)


그래서 아래와 같이 처리하면 된다.

const redisCli = redis.createClient(6379,'127.0.0.1');
redisCli.auth('원하는암호');





 https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-server-refused-our-key/


처음 인스턴스를 생성할 때 다운로드 했던 pem 파일을 찾지 못한다면... 사망!! 처음부터 다시 구축하던가 백업해둔 이미지로 다시 생성!!


1. 해당 인스턴스를 실행 중지 시키고.. 


2. 작업 > 인스턴스 설정 > 사용자 데이터 보기/변경을 선택 (인스턴스가 완전히 종료되지 않은 상태에서 변경 불가)


3. 아래 코드를 붙여넣기 한 다음


#cloud-config
ssh_deletekeys: false
ssh_authorized_keys:
cloud_final_modules:
  - [ssh, always]

4. puttygen을 연 후, load 버튼을 눌러 저장해둔 pem 파일을 연다.


5. 그러면 상단 텍스트 박스에 public key 텍스트가 출력되는데 ssh-rsa로 시작하는 텍스트부터 끝까지 복사를 한다.


6. 붙여넣기 했던 위 코드 중 ssh_authorized_keys:  바로 옆에 복사한 내용을 붙여넣는다. 


7. 저장 하고 인스턴스를 다시 시작한다.


8. 다시 연결되는 것을 확인할 수 있다. 


위 링크의 내용을 그대로 가져왔지만 붙여 넣기 할 때 주의가 필요함. 

EC2 대시보드 -> 인스턴스 -> 인스턴스 시작 


여기서는 Amazon Linux AMI를 선택하려 한다. 




인스턴스 유형은 t2.micro (역시 프리 티어 사용 가능 ) 선택 후 "검토 및 시작" 버튼. 


 (인스턴스 구성 및 스토리지 추가 등이 필요하면 각 상세 항목을 설정할 수 있다. 각 항목은 추후 필요할 때 다시 설정할 예정이니 여기서는 넘어가자.)



"시작" 버튼을 누르면 키페어에 대한 질의가 나온다. "새 키 페어 생성"을 눌러보자.


키 페어 이름을 넣은 후 "키 페어 다운로드"를 해서 pem 파일을 만들어두자. 원격 제어를 위해 접근하려면 꼭 필요하다. 





그리고 인스턴스를 시작하면 생성 후 가동된다. 


이제 터미널에서 접속하는 과정을 보자. 


일단 다운받은 pem 파일을 원하는 위치에 놓고 터미널에서 해당 폴더로 이동한다.


그리고 pem 파일 권한에 읽기 권한을 아래와 같이 부여한다.


chmod 400 yourfilename.pem



그리고 터미널에서 ssh로 바로 접속해보자.


ssh -i yourfilename.pem ec2-user@yourec2domain


이제 EC2로 바로 접속할 수 있다. 


참고로 EC2 인스턴스를 활성화 시킨 후 재부팅 등이 이루어지면 IP와 도메인이 변경된다. 고정 IP를 할당하자면 비용이 추가되니 필요에 따라 선택이 필요하다. 









AWS 문서를 따라 했지만 안되는 문제가 발생했다. (공식 문서)


아래와 같은 방법으로 처리해야 whitelist를 적용할 수 있다.


1. 해당 bucket의 권한 탭에서 "버킷 정책"을 선택. 아래와 같이 정보를 입력한다.


{

    "Version": "2012-10-17",

    "Id": "Policy......",

    "Statement": [

        {

            "Sid": "WhiteListfor",

            "Effect": "Deny",

            "Principal": "*",

            "Action": "s3:*",

            "Resource": "arn:aws:s3:::your-bucket-name/*",

            "Condition": {

                "NotIpAddress": {

                    "aws:SourceIp": "Ip address range to allow"

                }

            }

        }

    ]

}

2. 해당 버킷의 필요한 파일, 폴더에 "everyone 읽기 속성"을 부여한다.


이렇게 하면 원하는 IP 대역에서만 접근이 가능해진다.


POST로 json데이터를 전달할 때,


서버 트리를 가지는 구조를 전달하면 400 bad request 를 리턴한다.


문제가 되는 구조는 아래와 같다. 


{ "msg" : { "to": "you", "from":"me"}}


text/plain으로 지정해서 보내봤지만 에러는 계속 발생한다. 



이를 아래와 같은 단일 구조로 만들어서 보내야 한다.


{"msgTo": "you", "msgFrom":"me"}




인증을 설정하지 않았어도 일반적인 웹브라우져에 주소를 입력하는 방식으로는 


{"message":"Missing Authentication Token"}  


이라는 메세지만 볼 수 있다.


Unity c# 코드를 기준으로 테스트를 해 보았다. 


----- UntyWebRequest 사용 시


WWWForm form = new WWWFrom();

form.AddField("test", "value");

UnityWebRequest www = UnityWebRequest.Post(apiAddr , form);

yield return www.SendWebRequest();     >> 실패. API 문서를 봐도 이 코드가 실패할 이유는 없는 듯 한데.. 안됨.


(* 참고 코드 : https://docs.unity3d.com/Manual/UnityWebRequest-SendingForm.html )



----- WWW 사용 시


string dataString ="json format data";

var encoding = new System.Text.UTF8Encoding();

Hashtable header = new Hashtable();

header.Add("Content-Type", "text/json");

header.Add("Content-Length", dataString.Length);

WWW www = new WWW(apiAddr, encoding.GetBytes(dataString));

yield return www;         >> 성공. 



음.. 무슨 차이지.. 당연히 UnityWebRequest API 공식 메뉴얼을 보고 코드를 작성했는데, 수동으로 헤더 설정해서 보낸 것과 무슨 차이가 발생하는걸까. 


-_-+++++++



+ Recent posts